py-auth-micro 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/PKG-INFO +1 -1
  2. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Core/_ldap_interactions.py +0 -1
  3. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Exceptions/__init__.py +0 -1
  4. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/LoginHandler/__init__.py +1 -1
  5. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/LoginHandler/_loginldap.py +6 -5
  6. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/LoginHandler/_loginlocal.py +3 -4
  7. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Models/_token.py +8 -7
  8. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Models/_user.py +7 -12
  9. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/WorkFlows/_userworkflow.py +17 -23
  10. py_auth_micro-0.2.2/py_auth_micro/_version.py +1 -0
  11. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro.egg-info/PKG-INFO +1 -1
  12. py_auth_micro-0.2.2/setup.py +14 -0
  13. py_auth_micro-0.2.0/py_auth_micro/_version.py +0 -1
  14. py_auth_micro-0.2.0/setup.py +0 -13
  15. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/LICENSE +0 -0
  16. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/README.rst +0 -0
  17. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Config/__init__.py +0 -0
  18. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Config/_appconfig.py +0 -0
  19. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Config/_dbconfig.py +0 -0
  20. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Config/_ldapconfig.py +0 -0
  21. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Core/__init__.py +0 -0
  22. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Core/_enums.py +0 -0
  23. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/LoginHandler/_loginbaseclass.py +0 -0
  24. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Models/__init__.py +0 -0
  25. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/Models/_group.py +0 -0
  26. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/WorkFlows/__init__.py +0 -0
  27. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/WorkFlows/_groupworkflow.py +0 -0
  28. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/WorkFlows/_misc.py +0 -0
  29. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/WorkFlows/_sessionworkflow.py +0 -0
  30. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro/__init__.py +0 -0
  31. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro.egg-info/SOURCES.txt +0 -0
  32. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro.egg-info/dependency_links.txt +0 -0
  33. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro.egg-info/requires.txt +0 -0
  34. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/py_auth_micro.egg-info/top_level.txt +0 -0
  35. {py_auth_micro-0.2.0 → py_auth_micro-0.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py_auth_micro
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: A wrapper around pyjwt
5
5
  Home-page: https://github.com/bad-microservices/py_auth_micro
6
6
  Author: Ole Hannemann
@@ -1,4 +1,3 @@
1
- from typing import Optional
2
1
  from dataclasses import dataclass
3
2
 
4
3
 
@@ -2,4 +2,3 @@
2
2
 
3
3
  class AlreadyExists(Exception):
4
4
  """An Exception to indicate a given Object already exists and can't be created again"""
5
- pass
@@ -60,7 +60,7 @@ async def login(
60
60
  password=password,
61
61
  )
62
62
  if not await login_handler.login():
63
- logger.debug(f"Could not log in User '{username}'!")
63
+ logger.error(f"Could not log in User '{username}'!")
64
64
  raise ValueError("could not log in")
65
65
  logger.info(f"User '{username}' successfully logged in.")
66
66
  return login_handler.user
@@ -1,5 +1,5 @@
1
1
  try:
2
- import ldap # type: ignore
2
+ import ldap # type: ignore
3
3
  except ImportError:
4
4
  pass
5
5
  import logging
@@ -9,6 +9,8 @@ from ..Config import LDAPConfig
9
9
  from ..Core import LDAPHelper
10
10
  from ..Models import User, Group
11
11
 
12
+ logger = logging.getLogger(__name__)
13
+
12
14
 
13
15
  class LoginLDAP(LoginBaseClass):
14
16
  """Login Provider for LDAP/AD Users
@@ -34,7 +36,6 @@ class LoginLDAP(LoginBaseClass):
34
36
  Returns:
35
37
  bool: Successfull Login
36
38
  """
37
- logger = logging.getLogger(__name__)
38
39
 
39
40
  if self.ldap_config is None:
40
41
  logger.debug("no ldap_config provided... can't do ldap logins")
@@ -82,9 +83,9 @@ class LoginLDAP(LoginBaseClass):
82
83
 
83
84
  # add user to group he should be in
84
85
  for add_group in add_groups:
85
- tmpgr, new = await Group.get_or_create({"name": add_group}, name=add_group)
86
- if new:
87
- await tmpgr.save()
86
+ tmpgr = await Group.get_or_none(name=add_group)
87
+ if tmpgr is None:
88
+ tmpgr = await Group.create(name=add_group)
88
89
  await self.user.groups.add(tmpgr)
89
90
 
90
91
  # remove user from group he is not a member of anymore
@@ -4,6 +4,8 @@ import logging
4
4
  from ..Models import User
5
5
  from ._loginbaseclass import LoginBaseClass
6
6
 
7
+ logger = logging.getLogger(__name__)
8
+
7
9
 
8
10
  class LoginLocal(LoginBaseClass):
9
11
  """Login Handler for Local Users
@@ -27,13 +29,10 @@ class LoginLocal(LoginBaseClass):
27
29
  Returns:
28
30
  bool: Successfull Login
29
31
  """
30
- logger = logging.getLogger(__name__)
31
- logger.debug(f"tyring to login {self.username} Localy")
32
32
 
33
+ logger.debug(f"tyring to login {self.username} Localy")
33
34
  pw_hash = self.user.password_hash
34
-
35
35
  pw_matches = bcrypt.checkpw(self.password.encode("utf-8"), pw_hash)
36
-
37
36
  logger.debug(f"PW matches for User '{self.username}': {pw_matches}")
38
37
 
39
38
  return pw_matches
@@ -16,6 +16,9 @@ from jwt_helper import SignMethod, JWTEncoder, JWTValidator
16
16
  from py_auth_micro.Config import AppConfig
17
17
 
18
18
 
19
+ logger = logging.getLogger(__name__)
20
+
21
+
19
22
  class Token(Model):
20
23
  """Databse Entity Holding Information around issued Identity Tokens
21
24
 
@@ -84,8 +87,8 @@ Valid Options>
84
87
  Returns:
85
88
  str: The ID-JWT
86
89
  """
87
- logger = logging.getLogger(__name__)
88
- logger.info(f"creating ID-Token JWT with id: {self.token_id}")
90
+
91
+ logger.debug(f"creating ID-Token JWT with id: {self.token_id}")
89
92
  usergroups = await self.user.groups.all().values_list("name", flat=True)
90
93
 
91
94
  token = jwt_encoder.create_jwt(
@@ -123,8 +126,7 @@ Valid Options>
123
126
  Returns:
124
127
  Token: the matched Database Token instance.
125
128
  """
126
- logger = logging.getLogger(__name__)
127
- logger.info(f"verifying ID-Token from {ip}")
129
+ logger.debug(f"verifying ID-Token from {ip}")
128
130
  logger.debug(f"token: {id_jwt}")
129
131
  token_content = jwt_validator.get_jwt_as_dict(id_jwt) # type: dict[str, dict]
130
132
 
@@ -150,7 +152,7 @@ Valid Options>
150
152
  logger.error("VHost missmatch!")
151
153
  raise ValueError("VHost missmatch!")
152
154
 
153
- logger.info("Token is valid")
155
+ logger.debug("Token is valid")
154
156
  # return the Token from the Database
155
157
  return token
156
158
 
@@ -167,8 +169,7 @@ Valid Options>
167
169
  Returns:
168
170
  str: a JWT Token
169
171
  """
170
- logger = logging.getLogger(__name__)
171
- logger.info("creating Access-Token")
172
+ logger.debug("creating Access-Token")
172
173
  usergroups = await (await self.user).groups.all().values_list("name", flat=True)
173
174
  logger.debug(f"Token Groups: {usergroups}")
174
175
  return jwt_encoder.create_jwt(
@@ -4,16 +4,13 @@ import datetime
4
4
  from typing import Optional
5
5
  from tortoise.fields import (
6
6
  Field,
7
- OneToOneField,
8
- BigIntField,
9
7
  DatetimeField,
10
8
  CharField,
11
9
  CharEnumField,
12
- OneToOneRelation,
13
10
  BinaryField,
14
11
  BooleanField,
15
12
  ManyToManyField,
16
- ReverseRelation,
13
+ OneToOneRelation
17
14
  )
18
15
  from tortoise.models import Model
19
16
  from jwt_helper import JWTEncoder
@@ -22,6 +19,8 @@ from py_auth_micro.Core import AuthSource
22
19
  from py_auth_micro.Config import AppConfig
23
20
  from py_auth_micro.Models._token import Token
24
21
 
22
+ logger = logging.getLogger(__name__)
23
+
25
24
 
26
25
  class User(Model):
27
26
  """Model Representing a User
@@ -79,7 +78,7 @@ class User(Model):
79
78
  backward_key="name",
80
79
  )
81
80
 
82
- token: ReverseRelation[Token]
81
+ token: OneToOneRelation[Token]
83
82
 
84
83
  async def create_id_token(
85
84
  self,
@@ -99,8 +98,7 @@ class User(Model):
99
98
  Returns:
100
99
  Token: _description_
101
100
  """
102
- logger = logging.getLogger(__name__)
103
- logger.info(f"creating token for {self.username}")
101
+ logger.debug(f"creating token for {self.username}")
104
102
  # check if old Token exists
105
103
  token = await Token.get_or_none(user=self.username)
106
104
 
@@ -133,12 +131,9 @@ class User(Model):
133
131
  Returns:
134
132
  bool: The Token got revoked.
135
133
  """
136
- logger = logging.getLogger(__name__)
137
- logger.info(f"revoking ID-Token for {self.username}")
134
+ logger.debug(f"revoking ID-Token for {self.username}")
138
135
  if self.token is not None:
139
- tokens = await self.token
140
- for token in tokens:
141
- await token.delete()
136
+ await self.token.delete()
142
137
  return True
143
138
 
144
139
  def __str__(self):
@@ -4,7 +4,7 @@ import re
4
4
  from dataclasses import dataclass
5
5
  from tortoise.exceptions import DoesNotExist
6
6
  from jwt_helper import JWTValidator
7
- from typing import Optional, Union
7
+ from typing import Optional
8
8
 
9
9
  from py_auth_micro.Models import User
10
10
  from py_auth_micro.Exceptions import AlreadyExists
@@ -26,9 +26,7 @@ class UserWorkflow:
26
26
  jwt_validator: JWTValidator
27
27
  app_cfg: AppConfig
28
28
 
29
- async def get_all(
30
- self, *, access_token: str, **kwargs
31
- ) -> dict[str, int | list[str]]:
29
+ async def get_all(self, *, access_token: str, **kwargs) -> dict:
32
30
  """Returns a list of all Usernames.
33
31
 
34
32
  Args:
@@ -181,34 +179,30 @@ class UserWorkflow:
181
179
  if user.username != requesting_user and not is_admin:
182
180
  return {"resp_code": 200, "resp_data": user_dict}
183
181
 
184
- tokens = await user.token
185
- # in theory a user could have multiple id tokens
186
-
187
182
  # add groups
188
183
  user_dict["groups"] = await user.groups.all().values_list("name", flat=True)
189
184
 
190
- if tokens is None:
185
+ token = await user.token
186
+
187
+ if token is None:
191
188
  user_dict["token_info"] = None
192
189
  return {"resp_code": 200, "resp_data": user_dict}
193
190
 
194
- for token in tokens:
195
- # we iterate over array of 1 token to make the typechecker happy
196
- user_dict["token_info"] = {
197
- "valid_until": token.valid_until.isoformat(),
198
- "last_use": token.last_use.isoformat(),
199
- "vhost": token.vhost,
200
- }
191
+ user_dict["token_info"] = {
192
+ "valid_until": token.valid_until.isoformat(),
193
+ "last_use": token.last_use.isoformat(),
194
+ "vhost": token.vhost,
195
+ }
201
196
 
202
197
  if is_admin:
203
198
  user_dict["auth_type"] = user.auth_type.name
204
- for token in tokens:
205
- user_dict["token_info"].update(
206
- {
207
- "kid": token.token_id,
208
- "ip": token.ip,
209
- "sign_method": token.sign_method.value,
210
- } # type: ignore
211
- )
199
+ user_dict["token_info"].update(
200
+ {
201
+ "kid": token.token_id,
202
+ "ip": token.ip,
203
+ "sign_method": token.sign_method.value,
204
+ } # type: ignore
205
+ )
212
206
 
213
207
  return {"resp_code": 200, "resp_data": user_dict}
214
208
 
@@ -0,0 +1 @@
1
+ __version__ = "0.2.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py_auth_micro
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: A wrapper around pyjwt
5
5
  Home-page: https://github.com/bad-microservices/py_auth_micro
6
6
  Author: Ole Hannemann
@@ -0,0 +1,14 @@
1
+ from setuptools import setup
2
+
3
+ with open("py_auth_micro/_version.py") as infile:
4
+ version_line = infile.read()
5
+
6
+ version_line = (
7
+ version_line.replace("__version__", "")
8
+ .replace("\n", "")
9
+ .replace("=", "")
10
+ .replace(" ", "")
11
+ .replace(" ", "")
12
+ )
13
+ version = version_line.replace('"', "")
14
+ setup(version=version)
@@ -1 +0,0 @@
1
- __version__ = "0.2.0"
@@ -1,13 +0,0 @@
1
- from setuptools import setup
2
- with open('py_auth_micro/_version.py') as infile:
3
- version_line = infile.read()
4
-
5
- version_line = version_line.replace("__version__","")
6
- version_line = version_line.replace("=","")
7
- version_line = version_line.replace(" ","")
8
- version_line = version_line.replace(" ","")
9
- version = version_line.replace("\"","")
10
- setup(
11
-
12
- version=version
13
- )
File without changes
File without changes
File without changes