Пример #1
0
def post_watched_page(request):
    """
        Add a new watched page
        Need check to make sure user owns repo
    """
    tr = TrackedLink.from_dict(request.validated)
    DBSession.add(tr)
    DBSession.commit()
    return tr.to_dict()
Пример #2
0
def post_watched_page(request):
    """
        Add a new watched page
        Need check to make sure user owns repo
    """
    tr = TrackedLink.from_dict(request.validated)
    DBSession.add(tr)
    DBSession.commit()
    return tr.to_dict()
Пример #3
0
def delete_user(request):
    """
        Delete a user
        privs: admin, or self
    """
    cur_user = request.validated['ValidUser']
    target_query = DBSession.query(User).filter(User.name==request.validated['username'])
    if target_query.count() > 0:
        target = target_query.first()
        if target.name == cur_user.name or cur_user.admin:
            DBSession.delete(target)
            DBSession.commit()
            return {"success": True}
    raise _401()
Пример #4
0
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()
    return {"success": True}
Пример #5
0
def edit_user(request):
    """
        Edit an existing user
        privs: logged in, or admin
        {"username": "******", "changes": {"username": "******", "password": "******", "email": "changed"}}
    """
    cur_user = request.validated['ValidUser']
    target_username = request.validated['username']
    target_users = DBSession.query(User).filter(User.name==target_username)
    if target_users.count() > 1:
        target_user = target_users.first()
        if target_user.name == cur_user.name or cur_user.admin:
            changes = request.validated['changes']
            if "username" in changes:
                if not DBSession.query(User).filter(User.name==changes['username']).count() > 1:
                    target_user.name = changes['username']
            if "password" in changes:
                target_user.password = hashlib.sha512(changes['password']).hexdigest()
            if "email" in changes:
                if not DBSession.query(User).filter(User.email==changes['email']).count() > 1:
                    target_user.email = changes['email']
            DBSession.add(target_user)
            DBSession.commit()
            return {"success": True}
    raise _401()
Пример #6
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")
Пример #7
0
def get_watch_runner(request):
    """
        When GET'd to this, will get info on the running jorbs
    """
    jobs = DBSession.query(ScrapeJob).filter(ScrapeJob.status==1)
    if jobs:
        return dict(jobs=[j.to_dict() for j in jobs])

    return dict(jobs=[])
Пример #8
0
def create_key(request):
    """
        Create a new api key for a user
        privs: logged in, admin
        {"username": "******"}
    """
    cur_user = request.validated['ValidUser']
    target_query = DBSession.query(User).filter(
        User.name == request.validated['username'])
    if target_query.count() > 0:
        target = target_query.first()
        if target.name == cur_user or cur_user.admin:
            key = gen_apikey()
            newAPIKey = APIKey(apikey=key, owner_id=target.id)
            DBSession.add(newAPIKey)
            DBSession.commit()
            return {"success": True}
    raise _401()
Пример #9
0
def create_key(request):
    """
        Create a new api key for a user
        privs: logged in, admin
        {"username": "******"}
    """
    cur_user = request.validated['ValidUser']
    target_query = DBSession.query(User).filter(
        User.name==request.validated['username'])
    if target_query.count() > 0:
        target = target_query.first()
        if target.name == cur_user or cur_user.admin:
            key = gen_apikey()
            newAPIKey = APIKey(apikey=key,owner_id=target.id)
            DBSession.add(newAPIKey)
            DBSession.commit()
            return {"success": True}
    raise _401()
Пример #10
0
def get_watch_runner(request):
    """
        When GET'd to this, will get info on the running jorbs
    """
    jobs = DBSession.query(ScrapeJob).filter(ScrapeJob.status == 1)
    if jobs:
        return dict(jobs=[j.to_dict() for j in jobs])

    return dict(jobs=[])
Пример #11
0
def put_watch_runner(request):
    """
        Update the runner's status.
    """
    job = DBSession.query(ScrapeJob).filter(
            ScrapeJob.id==request.validated['id']).one()

    job.status = request.validatated['new_status']

    return job.to_dict()
Пример #12
0
def sync_svn(DBSession):
    print("Syncing svn repos")
    repos = DBSession.query(Repo).filter(Repo.source_type == 'svn')
    for repo in repos:
        try:
            repo.clone()
        except:
            pass
        svnurl = repo.source_url
        pass
Пример #13
0
def sync_svn(DBSession):
    print("Syncing svn repos")
    repos = DBSession.query(Repo).filter(Repo.source_type=='svn')
    for repo in repos:
        try:
            repo.clone()
        except:
            pass
        svnurl = repo.source_url
        pass
Пример #14
0
def put_watch_runner(request):
    """
        Update the runner's status.
    """
    job = DBSession.query(ScrapeJob).filter(
        ScrapeJob.id == request.validated['id']).one()

    job.status = request.validatated['new_status']

    return job.to_dict()
Пример #15
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")
Пример #16
0
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()
Пример #17
0
def push_repo(request):
    """
        Push changes to this repo to a remote
    """
    cur_user = request.validated['ValidUser']
    repos = DBSession.query(Repo).filter(Repo.id==request.matchdict['rid'])
    if repos.count() > 0:
        repo = repos.first()
        if repo.owner_id == cur_user.id or cur_user.admin:
            repo.push()
            return {"success": True}
    raise _401()
Пример #18
0
def clone_repo(request):
    """
        clone a repo fresh
    """
    cur_user = request.validated['ValidUser']
    repo_query = DBSession.query(Repo).filter(Repo.id==1)
    if repo_query.count() > 0:
        repo = repo_query.first()
        if repo.owner_id == cur_user.id or cur_user.admin:
            repo.clone()
            return {"success": True}
    raise _401()
Пример #19
0
def oauth_get_code(request):

    client_id = request.registry.settings["client_id"]
    client_secret = request.registry.settings["client_secret"]
    response = oauth_authorize(request)
    secret = None
    if DBSession.query(Secret).all().count > 0:
        secret = DBSession.query(Secret).first()
    else:
        secret = Secret()
    # do stuff to secret to set info
    secret.access_token = response.get('access_token')
    DBSession.add(secret)
    DBSession.commit()

    log.info(secret.public_key)
    data = {
        "title": "SpaceHub",
        "key": secret.public_key,
    }
    params = {
        "access_token": secret.access_token
    }

    # add public key to user's acc.
    response = requests.post(GITHUB_API_URL + "/user/keys", params=params,data=json.dumps(data))
    log.info(response.text)
    raise HTTPTemporaryRedirect(location="/app/index.html#/repos")
Пример #20
0
def get_users(request):
    """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}
Пример #21
0
def valid_user(request):
    """
        Require that a valid user be logged in to access this path
    """
    email = authenticated_userid(request)
    if email:
        user_query = DBSession.query(User).filter(User.email==email)
        if user_query.count() > 0:
            user = user_query.first()
            request.validated['ValidUser'] = user
            logger.info("User: "******" " + str(user.id))
        else:
            raise _401()
    else:
        raise _401()
Пример #22
0
def valid_user(request):
    """
        Require that a valid user be logged in to access this path
    """
    email = authenticated_userid(request)
    if email:
        user_query = DBSession.query(User).filter(User.email == email)
        if user_query.count() > 0:
            user = user_query.first()
            request.validated['ValidUser'] = user
            logger.info("User: "******" " + str(user.id))
        else:
            raise _401()
    else:
        raise _401()
Пример #23
0
def post_repo(request):
    """
        To create a new repository
    """
    cur_user = request.validated['ValidUser']
    data = request.validated
    data.update({'owner_id': cur_user.id})
    r = Repo.from_dict(data)
    if not DBSession.query(Repo).filter(Repo.name==r.name).count() > 0:
        DBSession.add(r)
        DBSession.commit()
        if data['source_type'] == 'tar':
            t = TrackedLink.from_dict({
                "repoid": r.id,
                "name": r.name,
                "link_text": data.get('link_text'),
                "url": r.source_url,
            })
            t.repo = r
            DBSession.add(t)
            DBSession.commit()
        return r.to_dict()
    raise _401()
Пример #24
0
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}))
        resp.headerlist.extend(headers)
        return resp
    else:
        raise _401()
Пример #25
0
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}))
        resp.headerlist.extend(headers)
        return resp
    else:
        raise _401()
Пример #26
0
def sync_tarballs(DBSession):
    logger.info(("Syncing Tarball links"))

    links = DBSession.query(TrackedLink).all()
    for link in links:
        repo = DBSession.query(Repo).filter(Repo.id==link.repo_id).first()
        try:
            repo.clone()
        except Exception as e:
            logger.info("Exception found: " + str(e.args))
            return
        extracted_dir = link.retrieve()
        cp('-R', sh.glob('{0}/*'.format(extracted_dir)), repo.dirname)
        repo.commit_a("Automated tarball sync: {0}".format(link.modified.strftime("%D %H:%M")))
        repo.push()
        repo.last_updated = datetime.now()
        DBSession.add(repo)
        DBSession.commit()
        logger.info("Synced {0} -> {1}".format(link.name, repo.name))
Пример #27
0
def delete_key(request):
    """
        Delete an api key
        privs: logged in, admin
        {"username": "******", "key": "dat-key"}
    """
    cur_user = request.validated['ValidUser']
    target_query = DBSession.query(User).filter(
        User.name==request.validated['username'])
    if target_query.count() > 0:
        target = target_query.first()
        if target == cur_user or cur_user.admin:
            key_query = DBSession.query(APIKey).filter(
                APIKey.apikey==request.validated['key'])
            if key_query.count() > 0:
                key = key_query.first()
                DBSession.delete(key)
                DBSession.commit()
                return {"success": True}
    raise _401()
Пример #28
0
def delete_key(request):
    """
        Delete an api key
        privs: logged in, admin
        {"username": "******", "key": "dat-key"}
    """
    cur_user = request.validated['ValidUser']
    target_query = DBSession.query(User).filter(
        User.name == request.validated['username'])
    if target_query.count() > 0:
        target = target_query.first()
        if target == cur_user or cur_user.admin:
            key_query = DBSession.query(APIKey).filter(
                APIKey.apikey == request.validated['key'])
            if key_query.count() > 0:
                key = key_query.first()
                DBSession.delete(key)
                DBSession.commit()
                return {"success": True}
    raise _401()
Пример #29
0
def sync_tarballs(DBSession):
    logger.info(("Syncing Tarball links"))

    links = DBSession.query(TrackedLink).all()
    for link in links:
        repo = DBSession.query(Repo).filter(Repo.id == link.repo_id).first()
        try:
            repo.clone()
        except Exception as e:
            logger.info("Exception found: " + str(e.args))
            return
        extracted_dir = link.retrieve()
        cp('-R', sh.glob('{0}/*'.format(extracted_dir)), repo.dirname)
        repo.commit_a("Automated tarball sync: {0}".format(
            link.modified.strftime("%D %H:%M")))
        repo.push()
        repo.last_updated = datetime.now()
        DBSession.add(repo)
        DBSession.commit()
        logger.info("Synced {0} -> {1}".format(link.name, repo.name))
Пример #30
0
def get_repos(request):
    cur_user = request.validated['ValidUser']
    return {"repos": [r.to_dict() for r in DBSession.query(Repo).filter(Repo.owner_id==cur_user.id).all()]}
Пример #31
0
def update_repos():
    engine = create_engine(db_url)
    DBSession.configure(bind=engine)
    sync_tarballs(DBSession)
Пример #32
0
def update_repo(request):
    repo = DBSession.query(Repo).filter(Repo.id==request.matchdict['rid']).first()
    repo.updict(request.json)
    DBSession.add(repo)
    DBSession.commit()
    return DBSession.query(Repo).filter(Repo.id==request.matchdict['rid']).first().to_dict()
Пример #33
0
def get_param_repo(request):
    return DBSession.query(Repo).filter(Repo.id==request.matchdict['rid']).first().to_dict()
Пример #34
0
def update_repos():
    engine = create_engine(db_url)
    DBSession.configure(bind=engine)
    sync_tarballs(DBSession)