Forráskód Böngészése

Improve application, working requests

JoostSijm 5 éve
szülő
commit
20b6ab4cca
4 módosított fájl, 58 hozzáadás és 17 törlés
  1. 13 3
      app/__init__.py
  2. 35 6
      app/flaskr.py
  3. 8 6
      app/models.py
  4. 2 2
      test.py

+ 13 - 3
app/__init__.py

@@ -11,6 +11,7 @@ from flask_migrate import Migrate
 from flask_argon2 import Argon2
 from dotenv import load_dotenv
 from sqlalchemy import MetaData
+from rival_regions_wrapper.rival_regions_wrapper import Client
 
 load_dotenv()
 
@@ -21,7 +22,7 @@ class Config():
     SQLALCHEMY_DATABASE_URI = os.environ["DATABASE_URI"]
     SQLALCHEMY_TRACK_MODIFICATIONS = False
     SEND_FILE_MAX_AGE_DEFAULT = 1296000
-  
+
 app = Flask(__name__)
 app.config.from_object(Config())
 app.jinja_env.lstrip_blocks = True
@@ -34,8 +35,8 @@ convention = {
     "ck": "ck_%(table_name)s_%(constraint_name)s",
     "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
     "pk": "pk_%(table_name)s"
-} 
- 
+}
+
 metadata = MetaData(naming_convention=convention)
 db = SQLAlchemy(app, metadata=metadata)
 migrate = Migrate(app, db)
@@ -46,3 +47,12 @@ login_manager.init_app(app)
 login_manager.login_view = "login"
 login_manager.login_message_category = "warning"
 argon2 = Argon2(app)
+
+# Rival Region wrapper
+credentials = {
+    "login_method": os.environ["LOGIN_METHOD"],
+    "username": os.environ["USERNAME"],
+    "password": os.environ["PASSWORD"]
+}
+rrclient = Client(show_window=os.environ["SHOW_WINDOW"])
+rrclient.login(credentials)

+ 35 - 6
app/flaskr.py

@@ -5,13 +5,12 @@ Simple flask thing
 
 import random
 import string
-from datetime import datetime
 from flask import render_template, request, redirect, \
     flash, url_for, abort, json
 from flask_breadcrumbs import Breadcrumbs, register_breadcrumb
 from flask_menu import Menu, register_menu
 from flask_login import login_required, login_user, logout_user
-from app import app, login_manager, db
+from app import app, login_manager, db, rrclient
 from app.models import User, Request, Log, Key
 
 Menu(app=app)
@@ -94,7 +93,7 @@ def user_overview_dlc(*args, **kwargs):
     """Generate dynamic_list for user"""
     id = request.view_args['id']
     user = User.query.get(id)
-    return [{'text': user.email, 'url': user.url}]
+    return [{'text': user.email, 'url': user.name}]
 
 
 @app.route('/user/<int:id>')
@@ -157,8 +156,8 @@ def api_authenticated():
     return json.dumps(False)
 
 
-@app.route('/api/request', methods=["GET"])
-def api_log():
+@app.route('/api/request/<path:url_path>', methods=["GET"])
+def api_get(url_path):
     """Check key"""
     if 'Authorization' not in request.headers:
         return abort(403)
@@ -169,8 +168,38 @@ def api_log():
         return abort(403)
 
     log = Log()
+    db.session.add(log)
+    db.session.commit()
+
+    result = rrclient.get(url_path)
+
+    log.succes = True
+    db.session.commit()
+    return result
+
+
+@app.route('/api/request/<path:url_path>', methods=["POST"])
+def api_post(url_path):
+    """Check key"""
+    if 'Authorization' not in request.headers:
+        return abort(403)
 
+    authorization = request.headers['authorization']
+    key = Key.query.filter(Key.key == authorization).first()
+    if not key or not key.active:
+        return abort(403)
+
+    log = Log()
     db.session.add(log)
     db.session.commit()
 
-    return json.dumps(True)
+    if request.json:
+        data = request.json
+    else:
+        data = {}
+
+    result = rrclient.post(url_path, data=data)
+
+    log.succes = True
+    db.session.commit()
+    return result

+ 8 - 6
app/models.py

@@ -2,7 +2,7 @@
 
 from datetime import datetime
 from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method
-from app import db, login_manager
+from app import db, login_manager, argon2
 from flask_login import UserMixin
 
 
@@ -28,8 +28,10 @@ class User(db.Model, UserMixin):
         """Hash password"""
         self._password = argon2.generate_password_hash(password)
 
-    def __init__(self, id=None):
-        self.id = id
+    def check_password(self, password):
+        """Check if password is correct"""
+        return argon2.check_password_hash(self.password, password)
+
 
 class Key(db.Model):
     """Model for Key"""
@@ -47,7 +49,7 @@ class Key(db.Model):
     )
     user = db.relationship(
         "User",
-        back_populates=db.backref("users", lazy="dynamic")
+        backref=db.backref("users", lazy="dynamic")
     )
 
 class Request(db.Model):
@@ -68,7 +70,7 @@ class Log(db.Model):
     )
     key = db.relationship(
         "Key",
-        back_populates=db.backref("logs", lazy="dynamic")
+        backref=db.backref("logs", lazy="dynamic")
     )
     request_id = db.Column(
         db.Integer,
@@ -76,5 +78,5 @@ class Log(db.Model):
     )
     request = db.relationship(
         "Request",
-        back_populates=db.backref("logs", lazy="dynamic")
+        backref=db.backref("logs", lazy="dynamic")
     )

+ 2 - 2
test.py

@@ -5,9 +5,9 @@ Test application for api request. Change authorization if necessary
 
 import requests
 
-URL = 'http://localhost:5000/'
+URL = 'http://localhost:5000/api/request/listed/country'
 HEADERS = {
-    'Authorization': 'cGwJNNbIhrKiMKjA4DuVhzL2YH8DxPDV37N5SAb6UbhYtFhYzgwhtmVS4iVloyEu'
+    'Authorization': 'ZDoJMSKBKz0TNhfOcCRiraCxb0UHqnbVPIQkP6yJkTdSkvysxnyQgu0U5oQ0NBa9'
 }
 
 DATA = {