Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.50 KB | None | 0 0
  1. Kode i Python:
  2. Fil: backend/admin-api/openwifi_admin_api/server.py
  3. (Planen er å slette koden fra dette dokumentet og ha det som et vedlegg)
  4.  
  5. from flask import jsonify, g  # redirect
  6. from openwifi.db import create_db, create_orm_session
  7. from datetime import timedelta
  8. from openwifi_admin_api import app
  9. # from openwifi_admin_api.modules.shared import *
  10. from flask_jwt import JWT, jwt_required, current_user
  11. from sqlalchemy.orm.exc import NoResultFound
  12. from openwifi.db_models import AdminUser
  13. from sqlalchemy.sql import text
  14.  
  15.  
  16. # Setup JWT
  17. app.config['JWT_EXPIRATION_DELTA'] = timedelta(
  18.     minutes=int(app.config['TOKEN_EXPIRE_AFTER']))
  19. app.config['JWT_AUTH_URL_RULE'] = app.config['JWT_AUTH_PATH']
  20. jwt = JWT(app)
  21.  
  22.  
  23. database = create_db(app.config['DATABASE'])
  24. db_session = create_orm_session(app.config['DATABASE'])
  25. # Migrating to ORM, use both database and db_session for now
  26. # openwifi = OpenWifi(database, db_session)
  27.  
  28. # @app.errorhandler(500)
  29. # def handle_internal_server_error(e):
  30. #    """
  31. #    This function will be runned whenever flask gets an unhandled Exception,
  32. #    intead of a random 500-error html page. It will not run in debug mode,
  33. #    since debug mode outputs stacktrace to html.
  34. #    """
  35. #    # Send developers an email? Since it only will go off in production.
  36. #    return jsonify({'This is embarrassing': True}), 500
  37.  
  38.  
  39. @app.before_request
  40. def before_request():
  41.     db = getattr(g, '_database', None)
  42.     if db is None:
  43.         g._database = db_session
  44.  
  45.  
  46. # Close db
  47. @app.teardown_appcontext
  48. def teardown_db(exception):
  49.     if db_session is not None:
  50.         db_session.close()
  51.  
  52.  
  53. @jwt.authentication_handler
  54. def authenticate(username, password):
  55.     db = db_session
  56.     # Prepare statement for database log entry
  57.     # Values where :is specified is later referenced in a dictionary
  58.     query = text("INSERT INTO admin_user_login_log(success, admin_user_id) VALUES (:success, :admin_user_id)")
  59.  
  60. query = text
  61. Dette definerer en spørring som skal brukes senere
  62.  
  63.  
  64.     try:
  65.         adminuser = get_admin_user(str(username))
  66.     except Exception as e:
  67.         app.logger.warning("Login attempt failed for user %s, %s", username, e)
  68.         return None
  69.  
  70. app.logger er en modul for loggføring i Python, med innslag som debug, info, warning og mer.
  71. Importeres i linje 4
  72. from openwifi_admin_api import app
  73.     if adminuser and adminuser.check_login(str(password)) and not adminuser.deleted:
  74.         # Happy path, user is able to login
  75.         db.execute(query, {"success": True, "admin_user_id": adminuser.id})
  76.         db.commit()
  77.         return adminuser
  78.     else:
  79.         # User is not able to login
  80.         db.execute(query, {"success": False, "admin_user_id": adminuser.id})
  81.         db.commit()
  82.         return None
  83. Denne if-setningen gjør to innslag i databasen om en bruker klarer å logge inn. Først setter den success = true, deretter admin_user_id
  84.  
  85. Hvis brukeren ikke klarer å logge inn skal scriptet også loggføre  det samme, men sette success = false. Dette gjør at Sky Labs også kan loggføre de som ikke klarer å logge inn
  86.  
  87.  
  88. # @jwt.error_handler
  89. # def error_handler(e):
  90. #     # TODO: SET PORT DYNAMICLY (2016-06-02) by bjorn
  91. #     return redirect(app.config['HOST'] + ':3334/login')
  92.  
  93. @jwt.user_handler
  94. def load_user(payload):
  95.     try:
  96.         user_id = int(payload['user_id'])
  97.         return get_admin_user(user_id)
  98.     except:
  99.         return None
  100.  
  101.  
  102. @jwt.payload_handler
  103. def make_payload(adminuser):
  104.     # listcustomers = adminuser.get_list_of_customers_id()
  105.     roleid = adminuser.role.id
  106.     payload = {
  107.         'user_id': adminuser.id,
  108.         'roleid': adminuser.role.id,
  109.         'username': adminuser.username,
  110.         'full_name': adminuser.full_name
  111.     }
  112.     if roleid == 15:
  113.         payload['assosiated_with'] = adminuser.customer.alias
  114.         payload['customer_id'] = adminuser.customer.id
  115.         payload['assosiated_type'] = "customer"
  116.     if roleid == 10:
  117.         payload['assosiated_with'] = adminuser.customer.alias
  118.         payload['customer_id'] = adminuser.customer.id
  119.         payload['assosiated_type'] = "customer"
  120.     if roleid == 5:
  121.         payload['assosiated_with'] = adminuser.partner.name
  122.         payload['partner_id'] = adminuser.partner.id
  123.         payload['assosiated_type'] = "partner"
  124.     if roleid == 2:
  125.         payload['assosiated_with'] = "Admin"
  126.         payload['assosiated_type'] = "super"
  127.     if roleid == 1:
  128.         payload['assosiated_with'] = "Superadmin"
  129.         payload['assosiated_type'] = "super"
  130.     return payload
  131.  
  132.  
  133. # Admin part of the api #
  134. @app.route('/init', methods=['POST'])
  135. @jwt_required()
  136. def init():
  137.     adminuser = current_user
  138.     response = {
  139.         'status': 'ok',
  140.         'message': 'initok',
  141.         'user_id': adminuser.id,
  142.         'alias': adminuser.get_alias(),
  143.         'roleid': adminuser.roleid,
  144.         'roletitle': adminuser.get_title(),
  145.     }
  146.     return jsonify(response)
  147.  
  148.  
  149. def get_admin_user(ident):
  150.     db = db_session
  151.     if isinstance(ident, str):
  152.         try:
  153.             admin_user = db.query(AdminUser).filter(
  154.                 AdminUser.username == ident).one()
  155.             return admin_user
  156.         except NoResultFound:
  157.             raise Exception('nosuchadminuser')
  158.     elif isinstance(ident, int):
  159.         try:
  160.             admin_user = db.query(AdminUser).filter(
  161.                 AdminUser.id == ident).one()
  162.             return admin_user
  163.         except NoResultFound:
  164.             raise Exception('nosuchadminuser')
  165.     return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement