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 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 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()
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 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 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 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 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 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 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()