def update_receiver_settings(store, user_id, request, language=GLSetting.memory_copy.default_language): receiver = store.find(Receiver, Receiver.id == unicode(user_id)).one() receiver.description[language] = request.get('description') if not receiver: raise errors.ReceiverGusNotFound new_password = request.get('password') old_password = request.get('old_password') if len(new_password) and len(old_password): receiver.user.password = change_password(receiver.user.password, old_password, new_password, receiver.user.salt) mail_address = acquire_mail_address(request) if not mail_address: raise errors.NoEmailSpecified # receiver.notification_fields is not update until GLClient supports them receiver.tip_notification = acquire_bool(request['tip_notification']) receiver.comment_notification = acquire_bool(request['comment_notification']) receiver.file_notification = acquire_bool(request['file_notification']) gpg_options_parse(receiver, request) return receiver_serialize_receiver(receiver, language)
def update_receiver(store, id, request, language=GLSetting.memory_copy.default_language): """ Updates the specified receiver with the details. raises :class:`globaleaks.errors.ReceiverGusNotFound` if the receiver does not exist. """ receiver = store.find(Receiver, Receiver.id == unicode(id)).one() v = dict(request) for attr in getattr(Receiver, "localized_strings"): v[attr] = getattr(receiver, attr) v[attr][language] = unicode(request[attr]) request = v if not receiver: raise errors.ReceiverGusNotFound mail_address = utility.acquire_mail_address(request) if not mail_address: raise errors.NoEmailSpecified homonymous = store.find(User, User.username == mail_address).one() if homonymous and homonymous.id != receiver.user_id: log.err("Update error: already present receiver with the requested username: %s" % mail_address) raise errors.ExpectedUniqueField('mail_address', mail_address) receiver.notification_fields = request['notification_fields'] receiver.tags = request['tags'] # the email address it's also the username, stored in User receiver.user.username = mail_address # The various options related in manage GPG keys are used here. gpg_options_parse(receiver, request) password = request.get('password') if len(password): security.check_password_format(password) receiver.user.password = security.hash_password(password, receiver.user.salt) contexts = request.get('contexts', []) for context in receiver.contexts: receiver.contexts.remove(context) for context_id in contexts: context = store.find(Context, Context.id == context_id).one() if not context: log.err("Update error: unexistent context can't be associated") raise errors.ContextGusNotFound receiver.contexts.add(context) receiver.update(request) receiver.last_update = utility.datetime_now() return admin_serialize_receiver(receiver, language)
def create_receiver(store, request, language=GLSetting.memory_copy.default_language): """ Creates a new receiver. Returns: (dict) the configured receiver """ v = dict(request) for attr in getattr(Receiver, "localized_strings"): v[attr] = {} v[attr][language] = unicode(request[attr]) request = v mail_address = utility.acquire_mail_address(request) if not mail_address: raise errors.NoEmailSpecified # Pretend that username is unique: homonymous = store.find(User, User.username == mail_address).count() if homonymous: log.err("Creation error: already present receiver with the requested username: %s" % mail_address) raise errors.ExpectedUniqueField('mail_address', mail_address) password = request.get('password') security.check_password_format(password) receiver_salt = security.get_salt(rstr.xeger('[A-Za-z0-9]{56}')) receiver_password = security.hash_password(password, receiver_salt) receiver_user_dict = { 'username': mail_address, 'password': receiver_password, 'salt': receiver_salt, 'role': u'receiver', 'state': u'enabled', 'failed_login_count': 0, } receiver_user = models.User(receiver_user_dict) receiver_user.last_login = utility.datetime_null() store.add(receiver_user) receiver = Receiver(request) receiver.user = receiver_user receiver.notification_fields = request.get('notification_fields') receiver.tags = request.get('tags') # The various options related in manage GPG keys are used here. gpg_options_parse(receiver, request) log.debug("Creating receiver %s" % receiver.user.username) store.add(receiver) create_random_receiver_portrait(receiver.id) contexts = request.get('contexts', []) for context_id in contexts: context = store.find(Context, Context.id == context_id).one() if not context: log.err("Creation error: invalid Context can't be associated") raise errors.ContextGusNotFound context.receivers.add(receiver) return admin_serialize_receiver(receiver, language)