def remove(self, args): "Remove user and his/her jobs" user = User.by_id(args.user) for jobmeta in user.jobs: print jobmeta.jobid self.job_factory.fromId(jobmeta.jobid).delete() User.delete(user) commit()
def update(self, args): "Update user data" user = User.by_id(args.userid) if 'user' in args: user.userid = args.user for job in user.jobs: job.owner = args.user JobMeta.add(job) if 'name' in args: user.displayname = args.name if 'email' in args: user.email = args.email if 'password' in args: user.password = args.password User.add(user) commit()
def login(self): """Login page * Authenticated -> forbidden exception * Unauthenticated * GET login page + MAC challenge * POST -> authenticated -> redirect came_from or home if came_from=login * POST -> unauthenticated -> login page Or if auto_register=True then generates user and redirects back to request.url except when route is PUT status.json then auto_register is ignored """ is_authenticated = self.request.user is not None if is_authenticated: return self.request.exception referrer = self.request.url login_url = self.request.route_url('login') if referrer == login_url: # never use the login form itself as came_from referrer = self.request.route_url('home') auto_register = self.request.registry.settings['auto_register'] # in anonymous mode we don't want the job status to be updated # by anyone so return the login form is_put = self.request.method == u'PUT' route_name = self.request.matched_route.name status_update = route_name == 'status.json' and is_put if auto_register and not status_update: user = User.generate() userid = user.userid # Force committing as this is an exception handler # which causes pyramid_tm to do a rollback instead of commit try: transaction.commit() except: pass headers = remember(self.request, userid) return HTTPFound(location=referrer, headers=headers) else: came_from = self.request.params.get('came_from', referrer) userid = '' password = '' if self.request.method == 'POST': userid = self.request.POST['userid'] password = self.request.POST['password'] user = User.by_id(userid) if user is not None and user.validate_password(password): headers = remember(self.request, userid) return HTTPFound(location=came_from, headers=headers) else: self.request.response.status_int = 401 # Add MAC challenge self.request.response.headers["WWW-Authenticate"] = "MAC" return dict( came_from=came_from, userid=userid, password=password, )
def login(self): """Login page * Authenticated -> forbidden exception * Unauthenticated * GET login page + MAC challenge * POST -> authenticated -> redirect came_from or home if came_from=login * POST -> unauthenticated -> login page Or if auto_register=True then generates user and redirects back to request.url except when route is PUT status.json then auto_register is ignored """ is_authenticated = self.request.user is not None if is_authenticated: return self.request.exception referrer = self.request.url login_url = self.request.route_url('login') if referrer == login_url: # never use the login form itself as came_from referrer = self.request.route_url('home') auto_register = self.request.registry.settings['auto_register'] # in anonymous mode we don't want the job status to be updated # by anyone so return the login form is_put = self.request.method == u'PUT' route_name = self.request.matched_route.name status_update = route_name == 'status.json' and is_put if auto_register and not status_update: user = User.generate() userid = user.userid # Force committing as this is an exception handler # which causes pyramid_tm to do a rollback instead of commit try: transaction.commit() except: pass headers = remember(self.request, userid) return HTTPFound(location=referrer, headers=headers) else: came_from = self.request.params.get('came_from', referrer) userid = '' password = '' if self.request.method == 'POST': userid = self.request.POST['userid'] password = self.request.POST['password'] user = User.by_id(userid) if user is not None and user.validate_password(password): headers = remember(self.request, userid) return HTTPFound(location=came_from, headers=headers) else: self.request.response.status_int = 401 # Add MAC challenge self.request.response.headers["WWW-Authenticate"] = "MAC" return dict(came_from=came_from, userid=userid, password=password, )