Completed
Pull Request — master (#448)
by
unknown
02:27
created

MyClass.__str__()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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