Prototype website for VPN service, Bitcoin payments via the Blockchain.info API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.5 KiB

10 years ago
  1. from flask import Flask
  2. from flask.ext.sqlalchemy import SQLAlchemy
  3. from flask_mail import Mail
  4. from flask.ext.security import SQLAlchemyUserDatastore, Security, user_registered
  5. from flask.ext.admin import Admin
  6. from flask.ext.admin.contrib.sqla import ModelView
  7. from config import ADMINS, MAILCONF, SECURITY_EMAIL_SENDER
  8. app = Flask(__name__)
  9. app.config.from_object('config')
  10. # Setup SQL database and ORM
  11. db = SQLAlchemy(app)
  12. # Initialize Flask-Security
  13. from models import User, Role, Ticket, Invoice
  14. user_datastore = SQLAlchemyUserDatastore(db, User, Role)
  15. security = Security(app, user_datastore)
  16. mail = Mail(app)
  17. # Initialize Flask-Admin
  18. from app import admin
  19. admin = Admin(app, name='PacketCrypt', index_view=admin.AdminIndex())
  20. admin.add_view(ModelView(User, db.session))
  21. admin.add_view(ModelView(Ticket, db.session))
  22. admin.add_view(ModelView(Invoice, db.session))
  23. @app.before_first_request
  24. def initialize():
  25. try:
  26. db.create_all()
  27. user = user_datastore.find_user(email='br4n@atr0phy.net')
  28. if not user:
  29. user = user_datastore.create_user(email='br4n@atr0phy.net', password='packetcrypt')
  30. user_datastore.add_role_to_user(user, 'Admin')
  31. app.logger.info("First run, create default admin user")
  32. for role in ('Admin', 'User'):
  33. user_datastore.create_role(name=role)
  34. db.session.commit()
  35. except Exception, e:
  36. app.logger.error(str(e))
  37. @user_registered.connect_via(app)
  38. def on_user_registered(sender, **extra):
  39. default_role = user_datastore.find_role("User")
  40. user_datastore.add_role_to_user(user, default_role)
  41. db.session.commit()
  42. # Import views
  43. from app import views
  44. if not app.debug:
  45. import logging
  46. from logging.handlers import SMTPHandler, RotatingFileHandler
  47. credentials = None
  48. if MAILCONF['MAIL_USERNAME'] or MAILCONF['MAIL_PASSWORD']:
  49. credentials = (MAILCONF['MAIL_USERNAME'], MAILCONF['MAIL_PASSWORD'])
  50. mail_handler = SMTPHandler((MAILCONF['MAIL_SERVER'], MAILCONF['MAIL_PORT']), SECURITY_EMAIL_SENDER, ADMINS, 'PacketCrypt failure', credentials)
  51. mail_handler.setLevel(logging.ERROR)
  52. app.logger.addHandler(mail_handler)
  53. file_handler = RotatingFileHandler('app.log', 'a', 1 * 1024 * 1024, 10)
  54. file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
  55. app.logger.setLevel(logging.INFO)
  56. file_handler.setLevel(logging.INFO)
  57. app.logger.addHandler(file_handler)
  58. app.logger.info('PacketCrypt startup')