Exemplo n.º 1
0
repo = Service(name='repo', path='/repo', description="Service to deal with "
              "the addition/deletion of repositories")
repo_param = Service(name='repo', path='/repo/{rid}', description="Service to "
                     "deal with the addition/deletion of repositories")
repo_act = Service(name='repo', path='/repo/act/{rid}', description="Service to "
                     "deal with the addition/deletion of repositories")
kicker = Service(name='kicker', path='/kick', description="Force all repos to sync")


@kicker.post()
def kick_sync(request):
    cron.sync_tarballs(DBSession)
    return {"success": True}


@repo_act.put(validators=[valid_body('message'), valid_user])
def commit_repo(request):
    """
        commit whatever changes have been made
    """
    cur_user = request.validated['ValidUser']
    repo_query = DBSession.query(Repo).filter(Repo.id==request.matchdict['rid'])
    if repo_query.count() > 0:
        repo = repo_query.first()
        if repo.owner_id == cur_user.id or cur_user.admin:
            repo.commit_a(request.validated['message'])
            return {"success": True}
    raise _401()


@repo_act.post(validators=valid_user)
Exemplo n.º 2
0
login = Service(name='users', path='/users/login', description='User login endpoints')


def gen_apikey():
    """
        Generate a unique api key
    """
    for _ in range(10):
        newkey = str(uuid.uuid5(uuid.NAMESPACE_DNS, 'spacehub.org')).replace('-', '')
        if DBSession.query(APIKey).filter(APIKey.apikey==newkey).count() == 0:
            return newkey
    raise Exception("can't make a unique key... wat")


@login.post(validators=valid_body('username', 'password'))
def login_user(request):
    """
        login a user
        privs: none
        {"username": "******", "password": "******"}
    """
    password = hashlib.sha512(request.validated['password']).hexdigest()
    username = request.validated['username']
    try:
        user = DBSession.query(User).filter(User.name==username).one()
    except:
        raise _401()
    if user and user.password == password:
        headers = remember(request, user.email)
        resp = Response(json.dumps({"success": True}))
Exemplo n.º 3
0
    """Get all users, privs: admin"""
    users = DBSession.query(User).all()
    scrubbed_users = []
    for user in users:
        scrubbed = {
            "username": user.name,
            "id": user.id,
            "repos": [r.to_dict() for r in user.repos],
            "apikeys": [a.apikey for a in user.apikeys],
        }
        scrubbed_users.append(scrubbed)
    return {"users": scrubbed_users}



@users.post(validators=valid_body("username", "password", "email"))
def create_user(request):
    """
        Create a new User
        This is expected a username, password, and email
        privs: None
    """
    new_user = User(
        name=request.validated['username'],
        password=hashlib.sha512(request.validated['password']).hexdigest(),
        email=request.validated['email']
    )
    if DBSession.query(User).filter(User.name==new_user.name).count() > 0:
        raise _401()
    DBSession.add(new_user)
    DBSession.commit()
Exemplo n.º 4
0

def gen_apikey():
    """
        Generate a unique api key
    """
    for _ in range(10):
        newkey = str(uuid.uuid5(uuid.NAMESPACE_DNS,
                                'spacehub.org')).replace('-', '')
        if DBSession.query(APIKey).filter(
                APIKey.apikey == newkey).count() == 0:
            return newkey
    raise Exception("can't make a unique key... wat")


@login.post(validators=valid_body('username', 'password'))
def login_user(request):
    """
        login a user
        privs: none
        {"username": "******", "password": "******"}
    """
    password = hashlib.sha512(request.validated['password']).hexdigest()
    username = request.validated['username']
    try:
        user = DBSession.query(User).filter(User.name == username).one()
    except:
        raise _401()
    if user and user.password == password:
        headers = remember(request, user.email)
        resp = Response(json.dumps({"success": True}))