def handler(event, context): headers = event.get('headers') or {} query_params = event.get('queryStringParameters') or {} authorization = headers.get('Authorization') try: body = json.loads(event.get('body')) except: body = {} decoded = jwt_decode(authorization) keys = body.get('props') or split(query_params.get('props')) verbose = body.get('verbose') or boolean(query_params.get('verbose')) user_id = decoded.get('user_id') email = body.get('email') or query_params.get('email') username = body.get('username') or query_params.get('username') raw_password = body.get('password') or query_params.get('password') if raw_password is not None: credential = (db.table('userProperty').or_where(db.query().where({ 'key': 'email', 'value': email, 'active': True, })).or_where(db.query().where({ 'key': 'username', 'value': username, 'active': True, })).first()) if credential is None: return abort(400, new_error('invalid credentials', 2)) user_id = credential.get('userId') user_password = get_props(user_id, keys=['password'])['password'] if password(raw_password) != user_password: return abort(400, new_error('invalid credentials', 2)) if db.table('user').where('id', user_id).first() is None: return abort(400, new_error('invalid token', 1)) data = get(user_id, keys=keys, verbose=verbose, is_me=True) return { 'body': json.dumps({'data': data}), 'headers': { 'Access-Control-Allow-Origin': '*' }, 'statusCode': 200, }
def handler(event, context): try: body = json.loads(event.get('body')) except: body = {} id_ = body.get('id') contents = body.get('contents') work = db.table('work').where('id', id_).first() try: if work is None: db.table('work').insert({ 'id': id_, 'contents': json.dumps(contents) }) work = db.table('work').where('id', id_).first() else: db.table('work').where('id', id_).update( {'contents': json.dumps(contents)}) except Exception as e: return abort(400, parse_sql_error(e)) return { 'body': dumps({'data': parse(work)}), 'headers': { 'Access-Control-Allow-Origin': '*' }, 'statusCode': 201, }
def handler(event, context): headers = event.get('headers') or {} authorization = headers.get('Authorization') try: body = json.loads(event.get('body')) except: body = {} try: decoded = jwt_decode(authorization) except: decoded = {} props = body.get('props') or {} verbose = body.get('verbose') user_id = decoded.get('user_id') unique_props = {k: v for k, v in props.items() if k in UNIQUE_KEYS} custom_props = {k: v for k, v in props.items() if k not in unique_props} if db.table('user').where('id', user_id).first() is None: return abort(401, new_error('invalid token', 1)) if 'password' in custom_props: custom_props['password'] = password(custom_props['password']) try: set_props(user_id, props=unique_props, unique=True) set_props(user_id, props=custom_props) except Exception as e: return abort(400, parse_sql_error(e)) return { 'body': json.dumps({ 'data': get( user_id, keys=props.keys(), verbose=verbose, ), }), 'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 200, }
def handler(event, context): headers = event.get('headers') or {} user_id = jwt_decode(headers.get('Authorization')).get('user_id') path_params = event.get('pathParameters') or {} work_id = path_params.get('id') work = db.table('work').where({'id': work_id}).first() if work is None: return abort(404, new_error('invalid id', 1)) if not can_delete(work_id, user_id): return abort(404, new_error('no permissions', 2)) db.table('work').where({'id': work_id}).update({ 'deletedAt': datetime.now(), }) return { 'body': json.dumps({'data': True}), 'headers': {'Access-Control-Allow-Origin': '*'}, 'statusCode': 200, }
def handler(event, context): path_params = event.get('pathParameters') work_id = path_params.get('id') work = db.table('work').where('id', work_id).first() if work is None: return abort(404, 'not found') return { 'body': dumps({'data': parse(work)}), 'headers': { 'Access-Control-Allow-Origin': '*' }, 'statusCode': 200, }
def handler(event, context): try: body = json.loads(event.get('body')) except: body = {} categorizable_id = body.get('categorizableId') categorizable_type = body.get('categorizableType') if categorizable_type is not None and categorizable_type not in types: return abort(403, new_error('invalid categorizable type', 1)) category_ids = [] for key in body.get('keys') or []: category_id = db.table('category').where('key', key).pluck('id') if category_id is None: category_id = db.table('category').insert_get_id({'key': key}) category_ids.append(category_id) if categorizable_id is not None and categorizable_type is not None: db.table('categoryMap').where({ 'categorizableId': categorizable_id, 'categorizableType': categorizable_type, }).delete() for category_id in category_ids: db.table('categoryMap').insert({ 'categoryId': category_id, 'categorizableId': categorizable_id, 'categorizableType': categorizable_type, }) return { 'body': dumps({'data': True}), 'headers': { 'Access-Control-Allow-Origin': '*' }, 'statusCode': 201, }
def handler(event, context): user_id = new_id() while db.table('user').where({'id': user_id}).first(): user_id = new_id() try: body = json.loads(event.get('body')) except: body = {} props = body.get('props') or {} verbose = body.get('verbose') unique_props = {k: v for k, v in props.items() if k in UNIQUE_KEYS} custom_props = {k: v for k, v in props.items() if k not in unique_props} if 'password' in custom_props: custom_props['password'] = password(custom_props['password']) try: set_props(user_id, props=unique_props, unique=True) set_props(user_id, props=custom_props) db.table('user').insert(id=user_id) except Exception as e: return abort(400, parse_sql_error(e)) return { 'body': dumps({ 'data': get( user_id, keys=props.keys(), verbose=verbose, is_me=True, ) }), 'headers': { 'Access-Control-Allow-Origin': '*' }, 'statusCode': 201, }