|
1 | | -from flask import Flask, jsonify, request |
| 1 | +from flask import Flask, jsonify, request, session |
| 2 | +from flask_login import LoginManager, login_required, \ |
| 3 | + current_user, UserMixin |
2 | 4 | import json |
| 5 | +from flask_sqlalchemy import SQLAlchemy |
3 | 6 | from flask_cors import CORS, cross_origin |
4 | 7 | from flask_migrate import Migrate |
5 | 8 | import flask_excel as excel |
|
22 | 25 | # import json |
23 | 26 | class Config(object): |
24 | 27 | SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL") |
25 | | - |
| 28 | + SQLALCHEMY_BINDS = { |
| 29 | + 'login-db': 'postgresql://{}:{}@login-db/{}'.format(os.getenv("L_POSTGRES_USER"), os.getenv("L_POSTGRES_PASSWORD"), os.getenv("L_POSTGRES_DB")) |
| 30 | + } |
| 31 | + SECRET_KEY = os.environ.get("SECRET_KEY") or "somethingsecret" |
26 | 32 |
|
27 | 33 | apache_path = os.environ.get("APACHE_PATH", "") |
28 | 34 | es_service = os.environ.get("ES_SERVICE", "localhost") |
29 | 35 |
|
30 | 36 | app = Flask(__name__) |
31 | 37 | app.config.from_object(Config) |
| 38 | +login_db = SQLAlchemy(app) |
| 39 | +login_manager = LoginManager(app) |
| 40 | +login_manager.login_view = "login" |
| 41 | +login_manager.session_protection = "strong" |
32 | 42 | db.init_app(app) |
33 | 43 | migrate = Migrate(app, db) |
34 | 44 | #es = Elasticsearch() |
35 | 45 | es = Elasticsearch(['http://'+es_service+':9200/']) |
| 46 | + |
| 47 | +""" DB Models """ |
| 48 | +class User(login_db.Model, UserMixin): |
| 49 | + __tablename__ = "users" |
| 50 | + __bind_key__ = "login-db" |
| 51 | + id = login_db.Column(login_db.Integer, primary_key=True) |
| 52 | + email = login_db.Column(login_db.String(100), unique=True, nullable=False) |
| 53 | + name = login_db.Column(login_db.String(100), nullable=True) |
| 54 | + avatar = login_db.Column(login_db.String(200)) |
| 55 | + access_token = login_db.Column(login_db.String(5000)) |
| 56 | + redwood_token = login_db.Column(login_db.String(5000)) |
| 57 | + tokens = login_db.Column(login_db.Text) |
| 58 | + created_at = login_db.Column(login_db.DateTime, default=datetime.datetime.utcnow()) |
| 59 | + |
| 60 | +@login_manager.user_loader |
| 61 | +def load_user(user_id): |
| 62 | + return User.query.get(int(user_id)) |
| 63 | + |
| 64 | +@app.route('/login') |
| 65 | +def login(): |
| 66 | + if current_user.is_authenticated: |
| 67 | + redirect('https://{}'.format(os.getenv('DCC_DASHBOARD_HOST'))) |
| 68 | + else: |
| 69 | + redirect('https://{}/login'.format(os.getenv('DCC_DASHBOARD_HOST'))) |
| 70 | + |
36 | 71 | @app.route('/invoices') |
| 72 | +@login_required |
37 | 73 | @cross_origin() |
38 | 74 | def find_invoices(): |
39 | 75 | project = str(request.args.get('project')) |
@@ -1514,6 +1550,7 @@ def get_manifes_full(): |
1514 | 1550 |
|
1515 | 1551 | #Get the manifest. You need to pass on the filters |
1516 | 1552 | @app.route('/action/service') |
| 1553 | +@login_required |
1517 | 1554 | @cross_origin() |
1518 | 1555 | def get_action_service(): |
1519 | 1556 | db = create_engine('postgresql://{}:{}@db/monitor'.format(os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD")), echo=False) |
|
0 commit comments