Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Kode i Python:
- Fil: backend/admin-api/openwifi_admin_api/server.py
- (Planen er å slette koden fra dette dokumentet og ha det som et vedlegg)
- from flask import jsonify, g # redirect
- from openwifi.db import create_db, create_orm_session
- from datetime import timedelta
- from openwifi_admin_api import app
- # from openwifi_admin_api.modules.shared import *
- from flask_jwt import JWT, jwt_required, current_user
- from sqlalchemy.orm.exc import NoResultFound
- from openwifi.db_models import AdminUser
- from sqlalchemy.sql import text
- # Setup JWT
- app.config['JWT_EXPIRATION_DELTA'] = timedelta(
- minutes=int(app.config['TOKEN_EXPIRE_AFTER']))
- app.config['JWT_AUTH_URL_RULE'] = app.config['JWT_AUTH_PATH']
- jwt = JWT(app)
- database = create_db(app.config['DATABASE'])
- db_session = create_orm_session(app.config['DATABASE'])
- # Migrating to ORM, use both database and db_session for now
- # openwifi = OpenWifi(database, db_session)
- # @app.errorhandler(500)
- # def handle_internal_server_error(e):
- # """
- # This function will be runned whenever flask gets an unhandled Exception,
- # intead of a random 500-error html page. It will not run in debug mode,
- # since debug mode outputs stacktrace to html.
- # """
- # # Send developers an email? Since it only will go off in production.
- # return jsonify({'This is embarrassing': True}), 500
- @app.before_request
- def before_request():
- db = getattr(g, '_database', None)
- if db is None:
- g._database = db_session
- # Close db
- @app.teardown_appcontext
- def teardown_db(exception):
- if db_session is not None:
- db_session.close()
- @jwt.authentication_handler
- def authenticate(username, password):
- db = db_session
- # Prepare statement for database log entry
- # Values where :is specified is later referenced in a dictionary
- query = text("INSERT INTO admin_user_login_log(success, admin_user_id) VALUES (:success, :admin_user_id)")
- query = text
- Dette definerer en spørring som skal brukes senere
- try:
- adminuser = get_admin_user(str(username))
- except Exception as e:
- app.logger.warning("Login attempt failed for user %s, %s", username, e)
- return None
- app.logger er en modul for loggføring i Python, med innslag som debug, info, warning og mer.
- Importeres i linje 4
- from openwifi_admin_api import app
- if adminuser and adminuser.check_login(str(password)) and not adminuser.deleted:
- # Happy path, user is able to login
- db.execute(query, {"success": True, "admin_user_id": adminuser.id})
- db.commit()
- return adminuser
- else:
- # User is not able to login
- db.execute(query, {"success": False, "admin_user_id": adminuser.id})
- db.commit()
- return None
- 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
- 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
- # @jwt.error_handler
- # def error_handler(e):
- # # TODO: SET PORT DYNAMICLY (2016-06-02) by bjorn
- # return redirect(app.config['HOST'] + ':3334/login')
- @jwt.user_handler
- def load_user(payload):
- try:
- user_id = int(payload['user_id'])
- return get_admin_user(user_id)
- except:
- return None
- @jwt.payload_handler
- def make_payload(adminuser):
- # listcustomers = adminuser.get_list_of_customers_id()
- roleid = adminuser.role.id
- payload = {
- 'user_id': adminuser.id,
- 'roleid': adminuser.role.id,
- 'username': adminuser.username,
- 'full_name': adminuser.full_name
- }
- if roleid == 15:
- payload['assosiated_with'] = adminuser.customer.alias
- payload['customer_id'] = adminuser.customer.id
- payload['assosiated_type'] = "customer"
- if roleid == 10:
- payload['assosiated_with'] = adminuser.customer.alias
- payload['customer_id'] = adminuser.customer.id
- payload['assosiated_type'] = "customer"
- if roleid == 5:
- payload['assosiated_with'] = adminuser.partner.name
- payload['partner_id'] = adminuser.partner.id
- payload['assosiated_type'] = "partner"
- if roleid == 2:
- payload['assosiated_with'] = "Admin"
- payload['assosiated_type'] = "super"
- if roleid == 1:
- payload['assosiated_with'] = "Superadmin"
- payload['assosiated_type'] = "super"
- return payload
- # Admin part of the api #
- @app.route('/init', methods=['POST'])
- @jwt_required()
- def init():
- adminuser = current_user
- response = {
- 'status': 'ok',
- 'message': 'initok',
- 'user_id': adminuser.id,
- 'alias': adminuser.get_alias(),
- 'roleid': adminuser.roleid,
- 'roletitle': adminuser.get_title(),
- }
- return jsonify(response)
- def get_admin_user(ident):
- db = db_session
- if isinstance(ident, str):
- try:
- admin_user = db.query(AdminUser).filter(
- AdminUser.username == ident).one()
- return admin_user
- except NoResultFound:
- raise Exception('nosuchadminuser')
- elif isinstance(ident, int):
- try:
- admin_user = db.query(AdminUser).filter(
- AdminUser.id == ident).one()
- return admin_user
- except NoResultFound:
- raise Exception('nosuchadminuser')
- return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement