From 55820746ab8ceab85d7e2cec6e33ef076d6960ce Mon Sep 17 00:00:00 2001 From: Daniel Ternyak Date: Sun, 27 Jan 2019 20:10:49 -0600 Subject: [PATCH] undo --- backend/grant/user/models.py | 56 ++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/backend/grant/user/models.py b/backend/grant/user/models.py index 590b9a81..5e54f234 100644 --- a/backend/grant/user/models.py +++ b/backend/grant/user/models.py @@ -180,6 +180,33 @@ class User(db.Model, UserMixin): def set_password(self, password: str): self.password = hash_password(password) db.session.commit() + send_email(self.email_address, 'change_password', { + 'display_name': self.display_name, + 'recover_url': make_url('/auth/recover'), + 'contact_url': make_url('/contact') + }) + + def set_email(self, email: str): + # Update email address + old_email = self.email_address + self.email_address = email + # Delete old verification(s?) + old_evs = EmailVerification.query.filter_by(user_id=self.id).all() + for old_ev in old_evs: + db.session.delete(old_ev) + # Generate a new one + ev = EmailVerification(user_id=self.id) + db.session.add(ev) + # Save changes & send notification & verification emails + db.session.commit() + send_email(old_email, 'change_email_old', { + 'display_name': self.display_name, + 'contact_url': make_url('/contact') + }) + send_email(self.email_address, 'change_email', { + 'display_name': self.display_name, + 'confirm_url': make_url(f'/email/verify?code={ev.code}') + }) def login(self): login_user(self) @@ -197,7 +224,7 @@ class User(db.Model, UserMixin): }) -class UserSchema(ma.Schema): +class SelfUserSchema(ma.Schema): class Meta: model = User # Fields to expose @@ -218,10 +245,33 @@ class UserSchema(ma.Schema): return obj.id -user_schema = UserSchema() -users_schema = UserSchema(many=True) +self_user_schema = SelfUserSchema() +self_users_schema = SelfUserSchema(many=True) +class UserSchema(ma.Schema): + class Meta: + model = User + # Fields to expose + fields = ( + "title", + "social_medias", + "avatar", + "display_name", + "userid" + ) + + social_medias = ma.Nested("SocialMediaSchema", many=True) + avatar = ma.Nested("AvatarSchema") + userid = ma.Method("get_userid") + + def get_userid(self, obj): + return obj.id + + +user_schema = SelfUserSchema() +users_schema = SelfUserSchema(many=True) + class SocialMediaSchema(ma.Schema): class Meta: model = SocialMedia