from time import time from . import r from config import server_config import jwt USER_TOKEN_PREFIX = server_config.get('server', 'user_token_prefix') SECERT = server_config.get('server', 'secret') JWT_ALGORITHM = 'HS256' def get_user_token(user_id, username): return { 'userID': user_id, 'username': username, 'createTime': time(), } def add_token(user_id, username, expire=2592000): token = jwt.encode(get_user_token(user_id, username), SECERT, algorithm=JWT_ALGORITHM).decode() r.set(USER_TOKEN_PREFIX + user_id, token, expire) return token def get_token(user_id): # return None if find nothing return r.get(USER_TOKEN_PREFIX + user_id)
from flask_mongoengine import MongoEngine from config import server_config db_name = server_config.get('mongo', 'db') db_host = server_config.get('mongo', 'host') db_port = server_config.get('mongo', 'port') print('Connecting mongo server ' + db_host + ':' + db_port + ' using db:' + db_name) db = MongoEngine()
from time import time import jwt from . import r from config import server_config from constant import UserNetworkSetting USER_NETWORK_PREFIX = server_config.get('server', 'user_network_prefix') SECERT = server_config.get('server', 'secret') JWT_ALGORITHM = 'HS256' def add_network_settings(user_id, network_setting: UserNetworkSetting, expire=2592000): r.set(USER_NETWORK_PREFIX + user_id, network_setting, expire) def get_network_settings(user_id): # return None if find nothing return r.get(USER_NETWORK_PREFIX + user_id) def remove_network_settings(user_id): r.delete(USER_NETWORK_PREFIX + user_id)
from flask import Flask from flask_restplus import Resource, Api from model import db from controller.user import user_api from controller.picture import picture_api from config import server_config app = Flask(__name__) # init db settings app.config['MONGODB_SETTINGS'] = { 'db': server_config.get('mongo', 'db'), 'host': server_config.get('mongo', 'host'), 'port': int(server_config.get('mongo', 'port')), 'username': server_config.get('mongo', 'username'), 'password': server_config.get('mongo', 'password'), } db.init_app(app) server_api = Api(app, version='1.0.0', title='adapt-app', doc='/doc/') # add namespaces (controllers) here server_api.add_namespace(user_api) server_api.add_namespace(picture_api) @server_api.route('/hello') class HelloSimple(Resource): def get(self): return {'hello': 'world'}
from redis import Redis from config import server_config # redis settings db = server_config.get('redis', 'db') host = server_config.get('redis', 'host') port = server_config.get('redis', 'port') print('Connecting redis server ' + host + ':' + port + ' using db:' + db) r = Redis(host, port, db)
from common import md5 from model.user import User from config import server_config from server_error import ServerError, ServerErrorCodes hash_secret = server_config.get('server', 'secret') def create_user(username, password, email): # create a user, but check if user exists first if User.objects(username=username).count() > 0: raise ServerError(ServerErrorCodes.ERR_INPUT_ERROR, message='username already exists') # md5 hash the string hashed_password = md5(password, hash_secret) print(hashed_password) # save the user user = User() user.username = username user.password = hashed_password user.email = email user.save() return None
from flask import Flask from flask_restplus import Resource, Api from model import db from controller.user import user_api from config import server_config app = Flask(__name__) # init db settings app.config['MONGODB_SETTINGS'] = { 'db': server_config.get('mongo', 'db'), 'host': server_config.get('mongo', 'host'), 'port': int(server_config.get('mongo', 'port')) } db.init_app(app) server_api = Api(app, version='1.0.0', title='adapt-app', doc='/doc/') # add namespaces (controllers) here server_api.add_namespace(user_api) @server_api.route('/hello') class HelloSimple(Resource): def get(self): return {'hello': 'world'} SERVER_HOST = server_config.get('server', 'host') SERVER_PORT = server_config.get('server', 'port')
from functools import wraps from flask import request, current_app, g import jwt from config import server_config from service import user as user_service from constant import UserRole SECRET = server_config.get('server', 'secret') # get authorization header from that magical request def login_required(roles=[UserRole.USER]): def real_deco(function): @wraps(function) def decorator(*args, **kwargs): auth = request.headers.get('Authorization') current_app.logger.info('authorization:' + auth) try: token_data = jwt.decode(auth, SECRET, algorithms='HS256') current_app.logger.info('token_data:' + str(token_data)) except Exception: raise Exception('Invalid token') if not token_data: raise Exception('invalid token') if not token_data['userID']: raise Exception('invalid token') # search for the user user = user_service.find_user_by_user_id_for_token(