Passed
Push — master ( e2c8b9...ecc141 )
by Jochen
02:40
created

byceps.services.verification_token.service._find_for_purpose_by_token()   A

Complexity

Conditions 1

Size

Total Lines 6
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nop 2
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
"""
2
byceps.services.verification_token.service
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2006-2019 Jochen Kupperschmidt
6
:License: Modified BSD, see LICENSE for details.
7
"""
8
9
from typing import Optional
10
11
from ...database import db
12
from ...typing import UserID
13
14
from .models import Purpose, Token
15
16
17
def find_or_create_for_email_address_confirmation(user_id: UserID) -> Token:
18
    token = find_for_email_address_confirmation_by_user(user_id)
19
20
    if token is None:
21
        token = create_for_email_address_confirmation(user_id)
22
23
    return token
24
25
26
def find_or_create_for_terms_consent(user_id: UserID) -> Token:
27
    token = find_for_terms_consent_by_user(user_id)
28
29
    if token is None:
30
        token = create_for_terms_consent(user_id)
31
32
    return token
33
34
35
def create_for_email_address_confirmation(user_id: UserID) -> Token:
36
    return _create_token(user_id, Purpose.email_address_confirmation)
37
38
39
def create_for_password_reset(user_id: UserID) -> Token:
40
    return _create_token(user_id, Purpose.password_reset)
41
42
43
def create_for_terms_consent(user_id: UserID) -> Token:
44
    return _create_token(user_id, Purpose.terms_consent)
45
46
47
def _create_token(user_id: UserID, purpose: Purpose) -> Token:
48
    token = Token(user_id, purpose)
49
50
    db.session.add(token)
51
    db.session.commit()
52
53
    return token
54
55
56
def delete_token(token: Token) -> None:
57
    db.session.delete(token)
58
    db.session.commit()
59
60
61
def find_for_email_address_confirmation_by_token(token_value: str) -> Token:
62
    purpose = Purpose.email_address_confirmation
63
    return _find_for_purpose_by_token(token_value, purpose)
64
65
66
def find_for_email_address_confirmation_by_user(user_id: UserID
67
                                               ) -> Optional[Token]:
68
    return Token.query \
69
        .filter_by(user_id=user_id) \
70
        .for_purpose(Purpose.email_address_confirmation) \
71
        .first()
72
73
74
def find_for_password_reset_by_token(token_value: str) -> Token:
75
    purpose = Purpose.password_reset
76
    return _find_for_purpose_by_token(token_value, purpose)
77
78
79
def find_for_terms_consent_by_token(token_value: str) -> Token:
80
    purpose = Purpose.terms_consent
81
    return _find_for_purpose_by_token(token, purpose)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable token does not seem to be defined.
Loading history...
82
83
84
def find_for_terms_consent_by_user(user_id: UserID) -> Optional[Token]:
85
    return Token.query \
86
        .filter_by(user_id=user_id) \
87
        .for_purpose(Purpose.terms_consent) \
88
        .first()
89
90
91
def _find_for_purpose_by_token(token_value: str, purpose: Purpose
92
                             ) -> Optional[Token]:
93
    return Token.query \
94
        .filter_by(token=token_value) \
95
        .for_purpose(purpose) \
96
        .first()
97