def create(self, webapp_name=None, **kwargs): """ Create a new user. """ # TODO: deserialize and validate here email = kwargs['email'] username = kwargs['username'] password = kwargs['password'] self._error_on_duplicate_email(email) user = model.User(email=email, password=password) user.username = username if self.app.config.user_activation_on: user.active = False else: # Activation is off, every new user is active by default. user.active = True self.session().add(user) try: self.session().flush() # TODO:?? flush needed for permissions below? If not, make optional except sqlalchemy.exc.IntegrityError as db_err: raise exceptions.Conflict(db_err.message) # can throw an sqlalx.IntegrityError if username not unique self.app.security_agent.create_private_user_role(user) if webapp_name == 'galaxy': # We set default user permissions, before we log in and set the default history permissions permissions = self.app.config.new_user_dataset_access_role_default_private self.app.security_agent.user_set_default_permissions( user, default_access_private=permissions) return user
def create(self, webapp_name=None, **kwargs): """ Create a new user. """ # TODO: deserialize and validate here email = kwargs['email'] username = kwargs['username'] password = kwargs['password'] self._error_on_duplicate_email(email) user = model.User(email=email, password=password) user.username = username if self.app.config.user_activation_on: user.active = False else: # Activation is off, every new user is active by default. user.active = True self.session().add(user) try: self.session().flush() # TODO:?? flush needed for permissions below? If not, make optional except sqlalchemy.exc.IntegrityError, db_err: raise exceptions.Conflict(db_err.message)
def create(self, email=None, username=None, password=None, **kwargs): """ Create a new user. """ self._error_on_duplicate_email(email) user = self.model_class(email=email) user.set_password_cleartext(password) user.username = username if self.app.config.user_activation_on: user.active = False else: # Activation is off, every new user is active by default. user.active = True self.session().add(user) try: self.session().flush() # TODO:?? flush needed for permissions below? If not, make optional except exc.IntegrityError as db_err: raise exceptions.Conflict(str(db_err)) # can throw an sqlalx.IntegrityError if username not unique self.app.security_agent.create_private_user_role(user) # We set default user permissions, before we log in and set the default history permissions if hasattr(self.app.config, "new_user_dataset_access_role_default_private"): permissions = self.app.config.new_user_dataset_access_role_default_private self.app.security_agent.user_set_default_permissions( user, default_access_private=permissions) return user
def error_if_uploading( self, hda ): """ Raise error if HDA is still uploading. """ # TODO: may be better added to an overridden get_accessible if hda.state == model.Dataset.states.UPLOAD: raise exceptions.Conflict( "Please wait until this dataset finishes uploading" ) return hda
def err_if_uploading(self, trans, hda): """ Raise error if HDA is still uploading. """ if hda.state == trans.model.Dataset.states.UPLOAD: raise exceptions.Conflict( "Please wait until this dataset finishes uploading") return hda
def _error_on_duplicate_email(self, email): """ Check for a duplicate email and raise if found. :raises exceptions.Conflict: if any are found """ # TODO: remove this check when unique=True is added to the email column if self.by_email(email) is not None: raise exceptions.Conflict('Email must be unique', email=email)
def set_slug( self, item, new_slug, user, flush=True ): """ Validate and set the new slug for `item`. """ # precondition: has been validated if not self.is_valid_slug( new_slug ): raise exceptions.RequestParameterInvalidException( "Invalid slug", slug=new_slug ) # error if slug is already in use if self._slug_exists( user, new_slug ): raise exceptions.Conflict( "Slug already exists", slug=new_slug ) item.slug = new_slug if flush: self.session().flush() return item
def create(self, trans, payload, **kwd): """ POST /api/categories Return a dictionary of information about the created category. The following parameters are included in the payload: :param name (required): the name of the category :param description (optional): the description of the category (if not provided, the name will be used) Example: POST /api/categories/?key=XXXYYYXXXYYY Content-Disposition: form-data; name="name" Category_Name Content-Disposition: form-data; name="description" Category_Description """ category_dict = dict(message='', status='ok') name = payload.get('name', '') if name: description = payload.get('description', '') if not description: # Default the description to the name. description = name if suc.get_category_by_name(self.app, name): raise exceptions.Conflict( 'A category with that name already exists.') else: # Create the category category = self.app.model.Category(name=name, description=description) trans.sa_session.add(category) trans.sa_session.flush() category_dict = category.to_dict( view='element', value_mapper=self.__get_value_mapper(trans)) category_dict[ 'message'] = "Category '%s' has been created" % str( category.name) category_dict['url'] = web.url_for(controller='categories', action='show', id=trans.security.encode_id( category.id)) else: raise exceptions.RequestParameterMissingException( 'Missing required parameter "name".') return category_dict
def create(self, email=None, username=None, password=None, **kwargs): """ Create a new user. """ self._error_on_duplicate_email(email) user = self.model_class(email=email) user.set_password_cleartext(password) user.username = username if self.app.config.user_activation_on: user.active = False else: # Activation is off, every new user is active by default. user.active = True self.session().add(user) try: self.session().flush() # TODO:?? flush needed for permissions below? If not, make optional except exc.IntegrityError as db_err: raise exceptions.Conflict(str(db_err)) self.app.security_agent.create_user_role(user, self.app) return user