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")
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()
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=[])
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")
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=[])
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))
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()
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
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
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()
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()
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")
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))
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()
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()
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()
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()
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}
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()
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()
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()
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}
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()
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()
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()
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()
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()
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()]}
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()
def get_param_repo(request): return DBSession.query(Repo).filter(Repo.id==request.matchdict['rid']).first().to_dict()