def comment(service_name): #Handle GET request if request.method == 'GET': service = Service.query.filter_by(name=service_name) if service is None: return toolkit.response({ 'result': 'do not find service %s' % service_name }) comments = Comment.query.filter_by(service_id=service.id) if comments is None: return toolkit.response([]) results = [] for comment in comments: timestamp = int(time.mktime(comment.create_time.utctimetuple())) obj = { 'create_time': timestamp, 'content': comment.comment, 'user': comment.user.username } results.append(obj) return toolkit.response({ results }) #Handle POST request data = request.data.decode('utf8') try: data = json.loads(data) except ValueError: return toolkit.api_error('Invalid data') service = Service.query.filter(name=service_name) if service == None: return toolkit.response({ 'result': 'do not find servcie %s' % service_name }) try: comment = data['content'] create_time = datetime.utcnow() db.session.add(Comment(comment=comment, create_time=create_time, ip=request.remote_addr, user=current_user, user_id=current_user.id, servcie=service, service_id=service.id)) db.session.commit() timestamp = int(time.mktime(create_time.utctimetuple())) return toolkit.response({ 'create_time': timestamp, 'content': data['content'], 'user': current_user.username }) except: return toolkit.api_error('Invalid data')
def wrapper(namespace, repository, *args, **kwargs): cfg = config.load() mirroring_cfg = cfg.mirroring resp = f(namespace, repository, *args, **kwargs) if not mirroring_cfg: return resp source = mirroring_cfg['source'] tags_cache_ttl = mirroring_cfg.get('tags_cache_ttl', DEFAULT_CACHE_TAGS_TTL) if resp.status_code != 404: logger.debug('Status code is not 404, no source ' 'lookup required') return resp if not cache.redis_conn: # No tags cache, just return logger.warning('mirroring: Tags cache is disabled, please set a ' 'valid `cache\' directive in the config.') source_resp = lookup_source( flask.request.path, stream=False, source=source ) if not source_resp: return resp return toolkit.response(data=source_resp.content, headers=source_resp.headers, raw=True) store = storage.load() request_path = flask.request.path if request_path.endswith('/tags'): # client GETs a list of tags tag_path = store.tag_path(namespace, repository) else: # client GETs a single tag tag_path = store.tag_path(namespace, repository, kwargs['tag']) data = cache.redis_conn.get('{0}:{1}'.format( cache.cache_prefix, tag_path )) if data is not None: return toolkit.response(data=data, raw=True) source_resp = lookup_source( flask.request.path, stream=False, source=source ) if not source_resp: return resp data = source_resp.content cache.redis_conn.setex('{0}:{1}'.format( cache.cache_prefix, tag_path ), tags_cache_ttl, data) return toolkit.response(data=data, headers=source_resp.headers, raw=True)
def profile(): user_manager = current_app.user_manager db_adapter = user_manager.db_adapter content_type = request.headers.get('Content-Type') if content_type.lower() == 'application/json': return toolkit.response({ 'result': 'success' }) else: return render_template('profile.html', user_manager=user_manager)
def logout(): user_manager = current_app.user_manager db_adapter = user_manager.db_adapter # POST request content_type = request.headers.get('Content-Type') if content_type.lower() == 'application/json': #data = json.loads(request.data.decode('utf8')) logout_user() return toolkit.response({ 'result': 'success' }) else: next = request.args.get('next', None) logout_user() if next != None: return redirect(next) return redirect('/')
def wrapper(*args, **kwargs): cfg = config.load() mirroring_cfg = cfg.mirroring resp = f(*args, **kwargs) if not mirroring_cfg: return resp source = mirroring_cfg['source'] if index_route: source = mirroring_cfg.get('source_index', source) logger.debug('Source provided, registry acts as mirror') if resp.status_code != 404: logger.debug('Status code is not 404, no source ' 'lookup required') return resp source_resp = lookup_source( flask.request.path, stream=stream, source=source ) if not source_resp: return resp store = storage.load() if not stream: logger.debug('JSON data found on source, writing response') resp_data = source_resp.content if cache: store_mirrored_data( resp_data, flask.request.url_rule.rule, kwargs, store ) return toolkit.response( data=resp_data, headers=source_resp.headers, raw=True ) logger.debug('Layer data found on source, preparing to ' 'stream response...') layer_path = store.image_layer_path(kwargs['image_id']) return _handle_mirrored_layer(source_resp, layer_path, store)
def login(): user_manager = current_app.user_manager db_adapter = user_manager.db_adapter login_form = user_manager.login_form(request.form) if request.method == 'GET': return render_template('login.html', form=login_form, user_manager=user_manager) # POST reqest next = request.args.get('next', None) content_type = request.headers.get('Content-Type', None) if content_type.lower() == 'application/json': data = json.loads(request.data.decode('utf8')) username = data.get('username', None) password = data.get('password', None) error_message = None if username is None: error_message = 'username can not be empty' elif password is None: error_message = 'password can bot be empty' else: pass if error_message != None: return toolkit.response({ 'result': error_message }) user = db_adapter.find_first_object(User, username=username) if user is None: return toolkit.response({ 'result': 'username is not exited' }) #Verify password result = user_manager.verify_password(password, user) if result == False: return toolkit.response({ 'result': 'password error' }) result = login_user(user, remember=True) if result == True: return toolkit.response({ 'result': 'success' }) else: return toolkit.response({ 'result': 'failure' }) else: if login_form.validate() == False: return toolkit.response({ 'result': 'failure' }) user = user_manager.find_user_by_username(login_form.username.data) remember = login_form.remember_me.data result = login_user(user, remember) if result == False: return toolkit.response({ 'result': 'failure' }) if next != None: return redirect(next) return redirect('/')
def unauthenticated(): return toolkit.response({ 'result': 'unauthenticated' })
def register(): user_manager = current_app.user_manager db_adapter = user_manager.db_adapter register_form = user_manager.register_form(request.form) if request.method == 'GET': return render_template('register.html', form=register_form, user_manager=user_manager) # POST request content_type = request.headers.get('Content-Type') if content_type.lower() == 'application/json': data = json.loads(request.data.decode('utf8')) username = data.get('username', None) password = data.get('password', None) email = data.get('email', None) error_message = None if username is None: error_message = 'username is None' elif password is None: error_message = 'password is None' elif email is None: error_message = 'email is None' else: pass if error_message != None: return toolkit.response({ 'result': error_message }) user_fileds = {} #Verify whether usrname has registed or not. object = db_adapter.find_first_object(User, username=username) if object != None: return toolkit.response({ 'result': 'user has registed' }) user_fileds['username'] = username #Verify whether email has registed or not. object = db_adapter.find_first_object(User, email=email) if object != None: return toolkit.response({ 'result': 'email has registed' }) user_fileds['email'] = email #Hash password user_fileds['password'] = user_manager.hash_password(password) db_adapter.add_object(User, **user_fileds) db_adapter.commit() return toolkit.response({ 'result': 'success' }) else: if register_form.validate() == False: return toolkit.response({ 'result': 'failure' }) user_fileds = {} user_fileds['username'] = register_form.username.data user_fileds['password'] = user_manager.hash_password(register_form.password.data) user_fileds['email'] = register_form.email.data db_adapter.add_object(User, **user_fileds) db_adapter.commit() return redirect('/v1/user/login')