Completed
Pull Request — master (#448)
by
unknown
53s queued 10s
created

list_users()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
1
import jwt
2
from flask_bcrypt import generate_password_hash, check_password_hash
3
from datetime import date, datetime, timedelta
4
from sqlalchemy.orm.exc import NoResultFound
5
from sqlalchemy import desc
6
from future.utils import python_2_unicode_compatible
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
                        @python_2_unicode_compatible
65
			            class MyClass(object):
66
    				        def __str__(self):
67
        				        return '{}'      
68
                        token = MyClass()
69
                        
70
                        return {'Authorization token': token, 'username': username}
71
                    else:
72
                        log("User triggered error login failed", "HIGH", "FAIL")
73
                        return {'Authorization token': ''}
74
                else:
75
                    log("User triggered error login failed", "HIGH", "FAIL")
76
                    return {'Authorization token': ''}
77
            else:
78
                log("User triggered error login failed", "HIGH", "FAIL")
79
                return {'Authorization token': ''}
80
    except NoResultFound:
81
        log("User triggered error login failed", "HIGH", "FAIL")
82
        return {'Authorization token': ''}
83
84
85
def list_privileges():
86
    log("User requested privileges items", "MEDIUM", "PASS")
87
    result = privileges.query.filter(privileges.privilegeID != "1").paginate(1, 500, False)
88
    return result
89
90
91
def create_user(data):
92
    log("A new user created", "MEDIUM", "PASS")
93
    my_secure_rng = random.SystemRandom()
94
    val_num(data.get('privilege'))
95
    pincode = my_secure_rng.randrange(10000000, 99999999)
96
    username = pincode
97
    email = data.get('email')
98
    access = "False"
99
    activated = "False"
100
    privilege_id = 0
101
    # New users can only edit:read:delete
102
    if data.get('privilege') == 1:
103
        log("User triggered error creating new user", "MEDIUM", "FAIL")
104
        return {'message': 'User could not be created'}
105
    else:
106
        privilege_id = data.get('privilege')
107
    password = ""
108
    user = users(privilege_id, pincode, username, password, access, activated, email)
109
    db.session.add(user)
110
    db.session.commit()
111
    result = users.query.filter(users.email == email).one()
112
113
    # Add user to default groupmember issue #422
114
    groupmember = groupmembers.query.order_by(desc(groupmembers.memberID)).first()
115
    groupmemberUser = groupmembers(groupmember.memberID + 1, result.userID, groupmember.groupID, groupmember.ownerID, None)
116
    db.session.add(groupmemberUser)
117
    db.session.commit()
118
119
    return result
120
121
122
def manage_user(user_id, data):
123
    log("Manage user triggered", "HIGH", "PASS")
124
    val_num(user_id)
125
    val_alpha(data.get('active'))
126
    status_activated = data.get('active')
127
    result = users.query.filter(users.userID == user_id).one()
128
    if users.query.filter(users.userID == user_id).one():
129
        result.access = status_activated
130
        db.session.add(result)
131
        db.session.commit()
132
        return {'message': 'User successfully managed'}
133
    else:
134
        log("User triggered error managing failed", "HIGH", "FAIL")
135
        return {'message': 'User could not be managed'}
136
137
138
def list_users():
139
    log("Overview of list users triggered", "HIGH", "PASS")
140
    result = users.query.paginate(1, 50, False)
141
    return result
142
143