Пример #1
0
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')
Пример #2
0
    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)
Пример #3
0
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)
Пример #4
0
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('/')
Пример #5
0
        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)
Пример #6
0
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('/')
Пример #7
0
def unauthenticated():
    return toolkit.response({
        'result': 'unauthenticated'
    })
Пример #8
0
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')