user can choose name

This commit is contained in:
Son NK 2019-07-22 21:28:17 +02:00 committed by Son NK
parent 0e0a11dfce
commit d61c402aea
3 changed files with 49 additions and 4 deletions

View File

@ -224,6 +224,13 @@ class User(db.Model, ModelMixin, UserMixin):
list(set(all_gen_emails).difference(set([suggested_gen_email]))),
)
def suggested_names(self) -> (str, [str]):
"""return suggested name and other name choices """
other_name = convert_to_id(self.name)
return self.name, [other_name, "Anonymous", "whoami"]
class ActivationCode(db.Model, ModelMixin):
"""For activate user account"""
@ -433,7 +440,10 @@ class ClientUser(db.Model, ModelMixin):
for scope in self.client.get_scopes():
if scope == Scope.NAME:
res[Scope.NAME.value] = self.user.name
if self.name:
res[Scope.NAME.value] = self.name
else:
res[Scope.NAME.value] = self.user.name
elif scope == Scope.AVATAR_URL:
if self.user.profile_picture_id:
res[Scope.AVATAR_URL.value] = self.user.profile_picture.get_url()

View File

@ -76,15 +76,26 @@
</div>
</div>
<div class="row mt-4">
<div class="row mt-4 md-4">
<div class="col-md-3 text-left">
<label>Name</label>
<label style="padding-top: .5rem">Name</label>
</div>
<div class="col-md-9">
{{ current_user.name }}
<select class="custom-select custom-select" name="suggested-name">
<option selected value="{{ suggested_name }}">{{ suggested_name }}</option>
{% for name in other_names %}
<option value="{{ name }}">{{ name }}</option>
{% endfor %}
</select>
<div class="mt-2">OR</div>
<div class="mt-2">
<input class="form-control" name="custom-name">
</div>
</div>
</div>
{% if current_user.profile_picture_id %}
<div class="row mt-4">
<div class="col-md-3 text-right">

View File

@ -65,6 +65,7 @@ def authorize():
if request.method == "GET":
if current_user.is_authenticated:
suggested_email, other_emails, email_suffix = None, [], None
suggested_name, other_names = None, []
# user has already allowed this client
client_user: ClientUser = ClientUser.get_by(
@ -76,6 +77,7 @@ def authorize():
user_info = client_user.get_user_info()
else:
suggested_email, other_emails = current_user.suggested_emails()
suggested_name, other_names = current_user.suggested_names()
email_suffix = random_string(6)
return render_template(
@ -86,6 +88,8 @@ def authorize():
Scope=Scope,
suggested_email=suggested_email,
personal_email=current_user.email,
suggested_name=suggested_name,
other_names=other_names,
other_emails=other_emails,
email_suffix=email_suffix,
EMAIL_DOMAIN=EMAIL_DOMAIN,
@ -115,6 +119,9 @@ def authorize():
custom_email_prefix = request.form.get("custom-email-prefix")
chosen_email = request.form.get("suggested-email")
suggested_name = request.form.get("suggested-name")
custom_name = request.form.get("custom-name")
gen_email = None
if custom_email_prefix:
# check if user can generate custom email
@ -143,6 +150,23 @@ def authorize():
if gen_email:
client_user.gen_email_id = gen_email.id
if custom_name:
LOG.d(
"use custom name %s for user %s client %s",
custom_name,
current_user,
client,
)
client_user.name = custom_name
elif suggested_name != current_user.name:
LOG.d(
"use another name %s for user %s client %s",
custom_name,
current_user,
client,
)
client_user.name = suggested_name
db.session.flush()
LOG.d("create client-user for client %s, user %s", client, current_user)