From 0817e45abe0d32e5154a9ecf75431695fb26c8cd Mon Sep 17 00:00:00 2001 From: Son NK Date: Fri, 12 Jul 2019 10:34:15 +0200 Subject: [PATCH] override User.create to set password, create GenEmail, set trial period --- app/auth/views/facebook.py | 7 +------ app/auth/views/github.py | 8 +------- app/auth/views/google.py | 7 +------ app/auth/views/register.py | 15 ++++----------- app/models.py | 19 +++++++++++++++++++ app/oauth/views/authorize.py | 5 ++++- server.py | 15 +++------------ 7 files changed, 33 insertions(+), 43 deletions(-) diff --git a/app/auth/views/facebook.py b/app/auth/views/facebook.py index 07142eb2..838dd11f 100644 --- a/app/auth/views/facebook.py +++ b/app/auth/views/facebook.py @@ -97,12 +97,7 @@ def facebook_callback(): # create user else: LOG.d("create facebook user with %s", facebook_user_data) - user = User.create(email=email, name=facebook_user_data["name"]) - - # set a random password - user.set_password(random_string(20)) - - user.activated = True + user = User.create(email=email, name=facebook_user_data["name"], activated=True) if picture_url: LOG.d("set user profile picture to %s", picture_url) diff --git a/app/auth/views/github.py b/app/auth/views/github.py index 6ae688fb..dd73a928 100644 --- a/app/auth/views/github.py +++ b/app/auth/views/github.py @@ -87,13 +87,7 @@ def github_callback(): # create user else: LOG.d("create github user") - user = User.create(email=email, name=github_user_data["name"]) - - # set a random password - user.set_password(random_string(20)) - - user.activated = True - + user = User.create(email=email, name=github_user_data["name"], activated=True) db.session.commit() login_user(user) diff --git a/app/auth/views/google.py b/app/auth/views/google.py index 8113ffe0..30ebc36d 100644 --- a/app/auth/views/google.py +++ b/app/auth/views/google.py @@ -96,12 +96,7 @@ def google_callback(): # create user else: LOG.d("create google user with %s", google_user_data) - user = User.create(email=email, name=google_user_data["name"]) - - # set a random password - user.set_password(random_string(20)) - - user.activated = True + user = User.create(email=email, name=google_user_data["name"], activated=True) if picture_url: LOG.d("set user profile picture to %s", picture_url) diff --git a/app/auth/views/register.py b/app/auth/views/register.py index 06b1b250..3cf30cb5 100644 --- a/app/auth/views/register.py +++ b/app/auth/views/register.py @@ -10,7 +10,7 @@ from app.config import URL from app.email_utils import notify_admin from app.extensions import db from app.log import LOG -from app.models import User, ActivationCode, PlanEnum, GenEmail +from app.models import User, ActivationCode from app.utils import random_string, encode_url @@ -38,16 +38,9 @@ def register(): flash(f"Email {form.email.data} already exists", "warning") else: LOG.debug("create user %s", form.email.data) - user = User.create(email=form.email.data, name=form.name.data) - user.set_password(form.password.data) - - # by default new user will be trial period - user.plan = PlanEnum.trial - user.plan_expiration = arrow.now().shift(days=+15) - db.session.flush() - - # create a first alias mail to show user how to use when they login - GenEmail.create_new_gen_email(user_id=user.id) + user = User.create( + email=form.email.data, name=form.name.data, password=form.password.data + ) db.session.commit() send_activation_email(user, next_url) diff --git a/app/models.py b/app/models.py index 707258e4..b6584d03 100644 --- a/app/models.py +++ b/app/models.py @@ -116,6 +116,25 @@ class User(db.Model, ModelMixin, UserMixin): profile_picture = db.relationship(File) + @classmethod + def create(cls, email, name, password=None, **kwargs): + user = super(User, cls).create(email=email, name=name, **kwargs) + + if not password: + # set a random password + user.set_password(random_string(20)) + + # by default new user will be trial period + user.plan = PlanEnum.trial + user.plan_expiration = arrow.now().shift(days=+15) + db.session.flush() + + # create a first alias mail to show user how to use when they login + GenEmail.create_new_gen_email(user_id=user.id) + db.session.flush() + + return user + def should_upgrade(self): """User is invited to upgrade if they are in free plan or their trial ends soon""" if self.plan == PlanEnum.free: diff --git a/app/oauth/views/authorize.py b/app/oauth/views/authorize.py index 1fc12172..bf76784e 100644 --- a/app/oauth/views/authorize.py +++ b/app/oauth/views/authorize.py @@ -82,7 +82,10 @@ def authorize(): else: # after user logs in, redirect user back to this page return render_template( - "oauth/authorize_nonlogin_user.html", client=client, next=request.url, Scope=Scope, + "oauth/authorize_nonlogin_user.html", + client=client, + next=request.url, + Scope=Scope, ) else: # user allows or denies gen_new_email = request.form.get("gen-email") == "on" diff --git a/server.py b/server.py index 8f509d66..16831f2c 100644 --- a/server.py +++ b/server.py @@ -29,15 +29,7 @@ from app.discover.base import discover_bp from app.extensions import db, login_manager, migrate from app.jose_utils import get_jwk_key from app.log import LOG -from app.models import ( - Client, - User, - ClientUser, - GenEmail, - RedirectUri, - PlanEnum, - Partner, -) +from app.models import Client, User, ClientUser, GenEmail, RedirectUri, Partner from app.monitor.base import monitor_bp from app.oauth.base import oauth_bp from app.partner.base import partner_bp @@ -94,13 +86,12 @@ def fake_data(): user = User.create( email="nguyenkims+local@gmail.com", name="Son Local", + password="password", activated=True, is_admin=True, is_developer=True, ) - user.set_password("password") - user.plan = PlanEnum.trial - user.plan_expiration = arrow.now().shift(weeks=2) + db.session.commit() GenEmail.create_new_gen_email(user_id=user.id)