Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Odevzdávací Systém MO
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Martin Mareš
Odevzdávací Systém MO
Commits
1195ddeb
Commit
1195ddeb
authored
2 years ago
by
Martin Mareš
Browse files
Options
Downloads
Patches
Plain Diff
Registrace ošetřuje kolize při změně e-mailu
Při implementaci registrace jsme na to úplně zapomněli. Closes
#307
and
#321
.
parent
66692424
No related branches found
No related tags found
1 merge request
!129
Bezpečné transakce při zakládání uživatelů/účastníků/účastí
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
mo/web/acct.py
+31
-16
31 additions, 16 deletions
mo/web/acct.py
with
31 additions
and
16 deletions
mo/web/acct.py
+
31
−
16
View file @
1195ddeb
...
@@ -193,6 +193,10 @@ def user_settings_personal():
...
@@ -193,6 +193,10 @@ def user_settings_personal():
sess
.
commit
()
sess
.
commit
()
flash
(
'
Heslo změněno.
'
,
'
success
'
)
flash
(
'
Heslo změněno.
'
,
'
success
'
)
if
form
.
email
.
data
!=
user
.
email
:
if
form
.
email
.
data
!=
user
.
email
:
if
mo
.
users
.
user_by_email
(
form
.
email
.
data
)
is
not
None
:
flash
(
'
Tuto e-mailovou adresu už používá jiný uživatel.
'
,
'
danger
'
)
ok
=
False
else
:
rr
=
mo
.
users
.
new_reg_request
(
db
.
RegReqType
.
change_email
,
request
.
remote_addr
)
rr
=
mo
.
users
.
new_reg_request
(
db
.
RegReqType
.
change_email
,
request
.
remote_addr
)
if
rr
:
if
rr
:
rr
.
user_id
=
user
.
user_id
rr
.
user_id
=
user
.
user_id
...
@@ -436,6 +440,7 @@ class Reg2:
...
@@ -436,6 +440,7 @@ class Reg2:
RegStatus
.
new
:
'
Chybný potvrzovací kód. Zkontrolujte, že jste odkaz z e-mailu zkopírovali správně.
'
,
RegStatus
.
new
:
'
Chybný potvrzovací kód. Zkontrolujte, že jste odkaz z e-mailu zkopírovali správně.
'
,
RegStatus
.
expired
:
'
Vypršela platnost potvrzovacího kódu, požádejte prosím o změnu e-mailu znovu.
'
,
RegStatus
.
expired
:
'
Vypršela platnost potvrzovacího kódu, požádejte prosím o změnu e-mailu znovu.
'
,
RegStatus
.
already_spent
:
'
Tento odkaz na potvrzení změny e-mailu byl již využit.
'
,
RegStatus
.
already_spent
:
'
Tento odkaz na potvrzení změny e-mailu byl již využit.
'
,
RegStatus
.
already_exists
:
'
Tuto adresu už použivá jiný účet.
'
,
},
},
db
.
RegReqType
.
reset_passwd
:
{
db
.
RegReqType
.
reset_passwd
:
{
RegStatus
.
new
:
'
Chybný kód pro obnovení hesla. Zkontrolujte, že jste odkaz z e-mailu zkopírovali správně.
'
,
RegStatus
.
new
:
'
Chybný kód pro obnovení hesla. Zkontrolujte, že jste odkaz z e-mailu zkopírovali správně.
'
,
...
@@ -519,9 +524,16 @@ class Reg2:
...
@@ -519,9 +524,16 @@ class Reg2:
self
.
user
=
user
self
.
user
=
user
return
True
return
True
def
change_email
(
self
):
def
change_email
(
self
)
->
bool
:
sess
=
db
.
get_session
()
sess
=
db
.
get_session
()
user
=
self
.
rr
.
user
user
=
self
.
rr
.
user
if
mo
.
users
.
user_by_email
(
self
.
rr
.
email
)
is
not
None
:
app
.
logger
.
info
(
f
'
Reg2: Uživatel #
{
user
.
user_id
}
si chce změnit email na <
{
user
.
email
}
>, ale už je použitý jiným účtem.
'
)
self
.
status
=
RegStatus
.
already_exists
return
False
# Tady je krátké okénko, kdy může nastat race condition. Chytí ji integritní omezení v DB a vznikne výjimka.
user
.
email
=
self
.
rr
.
email
user
.
email
=
self
.
rr
.
email
app
.
logger
.
info
(
f
'
Reg2: Uživatel #
{
user
.
user_id
}
si změnil email na <
{
user
.
email
}
>
'
)
app
.
logger
.
info
(
f
'
Reg2: Uživatel #
{
user
.
user_id
}
si změnil email na <
{
user
.
email
}
>
'
)
...
@@ -536,6 +548,7 @@ class Reg2:
...
@@ -536,6 +548,7 @@ class Reg2:
self
.
rr
.
used_at
=
mo
.
now
self
.
rr
.
used_at
=
mo
.
now
sess
.
commit
()
sess
.
commit
()
return
True
def
change_passwd
(
self
,
new_passwd
:
str
):
def
change_passwd
(
self
,
new_passwd
:
str
):
sess
=
db
.
get_session
()
sess
=
db
.
get_session
()
...
@@ -610,13 +623,15 @@ def confirm_email():
...
@@ -610,13 +623,15 @@ def confirm_email():
form
=
ConfirmEmailForm
()
form
=
ConfirmEmailForm
()
if
form
.
validate_on_submit
():
if
form
.
validate_on_submit
():
if
form
.
submit
.
data
:
if
form
.
submit
.
data
:
reg2
.
change_email
()
if
reg2
.
change_email
()
:
flash
(
'
E-mail změněn.
'
,
'
success
'
)
flash
(
'
E-mail změněn.
'
,
'
success
'
)
return
redirect
(
url_for
(
'
user_settings
'
))
elif
form
.
cancel
.
data
:
elif
form
.
cancel
.
data
:
reg2
.
spend_request
()
reg2
.
spend_request
()
flash
(
'
Požadavek na změnu e-mailu zrušen.
'
,
'
success
'
)
flash
(
'
Požadavek na změnu e-mailu zrušen.
'
,
'
success
'
)
return
redirect
(
url_for
(
'
user_settings
'
))
return
redirect
(
url_for
(
'
user_settings
'
))
reg2
.
flash_message
()
form
.
orig_email
.
data
=
reg2
.
rr
.
user
.
email
form
.
orig_email
.
data
=
reg2
.
rr
.
user
.
email
form
.
new_email
.
data
=
reg2
.
rr
.
email
form
.
new_email
.
data
=
reg2
.
rr
.
email
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment