Completed
Push — master ( 895fc6...31d0bd )
by Glenn
01:16
created

list_privileges()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
1
import jwt, secrets
2
3
from flask_bcrypt import generate_password_hash, check_password_hash
4
from datetime import date, datetime, timedelta
0 ignored issues
show
Unused Code introduced by
Unused date imported from datetime
Loading history...
5
from sqlalchemy.orm.exc import NoResultFound
6
from sqlalchemy import desc
7
8
from skf import settings
9
from skf.database import db
10
from skf.database.users import users
11
from skf.database.groupmembers import groupmembers
12
from skf.database.privileges import privileges
13
from skf.api.security import log, val_num, val_alpha, val_alpha_num
14
15
16
def activate_user(user_id, data):
17
    log("User is activated", "HIGH", "PASS")
18
    val_num(user_id)
19
    val_num(data.get('accessToken'))
20
    val_alpha_num(data.get('username'))
21
    username = data.get('username')
22
    username = username.replace(" ", "")
23
    result = users.query.filter(users.userID == user_id).one()
24
    if result.activated == "False":
25
        if result.email == data.get('email'):
26
            if data.get('password') == data.get('repassword'):
27
                if data.get('accessToken') == result.accessToken:
28
                    pw_hash = generate_password_hash(data.get('password')).decode('utf-8')
29
                    result.password = pw_hash
30
                    result.access = "True"
31
                    result.activated = "True"
32
                    result.userName = username
33
                    db.session.add(result)
34
                    db.session.commit()
35
                    return {'message': 'User successfully activated'}
36
    else:
37
        log("User triggered error activation failed", "HIGH", "FAIL")
38
        return {'message': 'User could not be activated'}
39
40
41
def login_user(data):
42
    log("User successfully logedin", "HIGH", "PASS")
43
    val_alpha_num(data.get('username'))
44
    username = data.get('username')
45
    try:
46
        if (users.query.filter(users.userName == username).one()):
47
            user = users.query.filter(users.userName == username).one()
48
            if (user.activated == "True"):
49
                if (user.access == "True"):
50
                    if check_password_hash(user.password, data.get('password')):
51
                        priv_user = privileges.query.filter(privileges.privilegeID == str(user.privilegeID)).first()
52
                        payload = {
53
                            # userid
54
                            'UserId': user.userID,
55
                            #issued at
56
                            'iat': datetime.utcnow(),
57
                            #privileges
58
                            'privilege': priv_user.privilege,
59
                            #expiry
60
                            'exp': datetime.utcnow() + timedelta(minutes=120)
61
                            #claims for access api calls
62
                            #'claims': 'kb/items/update,project/items,non/existing/bla,'
63
                        }
64
                        token_raw = jwt.encode(payload, settings.JWT_SECRET, algorithm='HS256')
65
                        token = str(token_raw,'utf-8')
66
                        return {'Authorization token': token, 'username': username}
67
                    else:
68
                        log("User triggered error login failed", "HIGH", "FAIL")
69
                        return {'Authorization token': ''}
70
                else:
71
                    log("User triggered error login failed", "HIGH", "FAIL")
72
                    return {'Authorization token': ''}
73
            else:
74
                log("User triggered error login failed", "HIGH", "FAIL")
75
                return {'Authorization token': ''}
76
    except NoResultFound:
77
        log("User triggered error login failed", "HIGH", "FAIL")
78
        return {'Authorization token': ''}
79
80
81
def list_privileges():
82
    log("User requested privileges items", "MEDIUM", "PASS")
83
    result = privileges.query.filter(privileges.privilegeID != "1").paginate(1, 500, False)
84
    return result
85
86
87
def create_user(data):
88
    log("A new user created", "MEDIUM", "PASS")
89
    my_secure_rng = secrets.SystemRandom()
90
    val_num(data.get('privilege'))
91
    pincode = my_secure_rng.randrange(10000000, 99999999)
92
    username = pincode
93
    email = data.get('email')
94
    access = "False"
95
    activated = "False"
96
    privilege_id = 0
97
    # New users can only edit:read:delete
98
    if data.get('privilege') == 1:
99
        log("User triggered error creating new user", "MEDIUM", "FAIL")
100
        return {'message': 'User could not be created'}
101
    else:
102
        privilege_id = data.get('privilege')
103
    password = ""
104
    user = users(privilege_id, pincode, username, password, access, activated, email)
105
    db.session.add(user)
106
    db.session.commit()
107
    result = users.query.filter(users.email == email).one()
108
109
    # Add user to default groupmember issue #422
110
    groupmember = groupmembers.query.order_by(desc(groupmembers.memberID)).first()
111
    groupmemberUser = groupmembers(groupmember.memberID + 1, result.userID, groupmember.groupID, groupmember.ownerID, None)
112
    db.session.add(groupmemberUser)
113
    db.session.commit()
114
115
    return result
116
117
118
def manage_user(user_id, data):
119
    log("Manage user triggered", "HIGH", "PASS")
120
    val_num(user_id)
121
    val_alpha(data.get('active'))
122
    status_activated = data.get('active')
123
    result = users.query.filter(users.userID == user_id).one()
124
    if users.query.filter(users.userID == user_id).one():
125
        result.access = status_activated
126
        db.session.add(result)
127
        db.session.commit()
128
        return {'message': 'User successfully managed'}
129
    else:
130
        log("User triggered error managing failed", "HIGH", "FAIL")
131
        return {'message': 'User could not be managed'}
132
133
134
def list_users():
135
    log("Overview of list users triggered", "HIGH", "PASS")
136
    result = users.query.paginate(1, 50, False)
137
    return result
138
139