1
0
mirror of https://github.com/dkmstr/openuds.git synced 2025-03-13 08:58:35 +03:00

added reset related data to user, to clean up mfa data for example

This commit is contained in:
Adolfo Gómez García 2023-02-23 19:37:24 +01:00
parent 165bd89829
commit 9be108dbd5
No known key found for this signature in database
GPG Key ID: DD1ABF20724CDA23
6 changed files with 44 additions and 21 deletions

View File

@ -78,7 +78,7 @@ def getPoolsForGroups(groups):
class Users(DetailHandler):
custom_methods = ['servicesPools', 'userServices']
custom_methods = ['servicesPools', 'userServices', 'cleanRelated']
def getItems(self, parent: Authenticator, item: typing.Optional[str]):
# processes item to change uuid key for id
@ -282,7 +282,7 @@ class Users(DetailHandler):
return 'deleted'
def servicesPools(self, parent: Authenticator, item):
def servicesPools(self, parent: Authenticator, item: str) -> typing.List[typing.Dict]:
uuid = processUuid(item)
user = parent.users.get(uuid=processUuid(uuid))
res = []
@ -304,7 +304,7 @@ class Users(DetailHandler):
return res
def userServices(self, parent: Authenticator, item):
def userServices(self, parent: Authenticator, item: str) -> typing.List[typing.Dict]:
uuid = processUuid(item)
user = parent.users.get(uuid=processUuid(uuid))
res = []
@ -316,6 +316,12 @@ class Users(DetailHandler):
res.append(v)
return res
def cleanRelated(self, parent: Authenticator, item: str) -> typing.Dict:
uuid = processUuid(item)
user = parent.users.get(uuid=processUuid(uuid))
user.cleanRelated()
return {'status': 'ok'}
class Groups(DetailHandler):

View File

@ -38,13 +38,14 @@ import logging
import typing
from django.utils.translation import ugettext_noop as _
from uds import models
from uds.models.util import getSqlDatetime
from uds.core import Module
from uds.core.auths import exceptions
if typing.TYPE_CHECKING:
from uds.core.environment import Environment
from uds.core.util.request import ExtendedHttpRequest
from uds.models import User
logger = logging.getLogger(__name__)
@ -194,7 +195,7 @@ class MFA(Module):
Internal method to put the data into storage
"""
storageKey = request.ip + userId
self.storage.putPickle(storageKey, (models.getSqlDatetime(), code))
self.storage.putPickle(storageKey, (getSqlDatetime(), code))
def process(
self,
@ -231,7 +232,7 @@ class MFA(Module):
try:
if data and validity:
# if we have a stored code, check if it's still valid
if data[0] + datetime.timedelta(seconds=validity) > models.getSqlDatetime():
if data[0] + datetime.timedelta(seconds=validity) > getSqlDatetime():
# if it's still valid, just return without sending a new one
return MFA.RESULT.OK
except Exception:
@ -281,7 +282,7 @@ class MFA(Module):
if (
validity > 0
and data[0] + datetime.timedelta(seconds=validity)
< models.getSqlDatetime()
< getSqlDatetime()
):
# if it is no more valid, raise an error
# Remove stored code and raise error
@ -310,7 +311,7 @@ class MFA(Module):
pass
@staticmethod
def getUserId(user: models.User) -> str:
def getUserId(user: 'User') -> str:
mfa = user.manager.mfa
if not mfa:
raise exceptions.MFAError('MFA is not enabled')

View File

@ -36,6 +36,7 @@ import typing
from django.db import models
from django.db.models import signals, Q, Count
from uds.core import mfas
from uds.core.util import log
from uds.core.util import storage
@ -230,6 +231,16 @@ class User(UUIDModel):
return 'User {} (id:{}) from auth {}'.format(
self.name, self.id, self.manager.name
)
def cleanRelated(self) -> None:
"""
Cleans up all related external data, such as mfa data, etc
"""
# If has mfa, remove related data
# If has mfa, remove related data
if self.manager.mfa:
self.manager.mfa.getInstance().resetData(mfas.MFA.getUserId(self))
@staticmethod
def beforeDelete(sender, **kwargs):
@ -248,8 +259,7 @@ class User(UUIDModel):
toDelete.getManager().removeUser(toDelete.name)
# If has mfa, remove related data
if toDelete.manager.mfa:
toDelete.manager.mfa.getInstance().resetData(toDelete)
toDelete.cleanRelated()
# Remove related stored values
with storage.StorageAccess('manager' + str(toDelete.manager.uuid)) as store:

File diff suppressed because one or more lines are too long

View File

@ -229,11 +229,6 @@ gettext("Report finished");
gettext("dismiss");
gettext("Generate report");
gettext("Delete tunnel token - USE WITH EXTREME CAUTION!!!");
gettext("Information");
gettext("In Maintenance");
gettext("Active");
gettext("Delete user");
gettext("Delete group");
gettext("Pool");
gettext("State");
gettext("User Services");
@ -264,6 +259,17 @@ gettext("Services Pool");
gettext("Groups");
gettext("Services Pools");
gettext("Assigned services");
gettext("Information");
gettext("Information");
gettext("Clean related (mfa,...)");
gettext("In Maintenance");
gettext("Active");
gettext("Delete user");
gettext("Delete group");
gettext("Clean data");
gettext("Clean related data (mfa, ...)?");
gettext("Related data resete");
gettext("dismiss");
gettext("New Authenticator");
gettext("Edit Authenticator");
gettext("Delete Authenticator");
@ -455,10 +461,6 @@ gettext("For optimal results, use "squared" images.");
gettext("The image will be resized on upload to");
gettext("Cancel");
gettext("Ok");
gettext("Summary");
gettext("Users");
gettext("Groups");
gettext("Logs");
gettext("Information for");
gettext("Services Pools");
gettext("Users");
@ -497,3 +499,7 @@ gettext("Groups");
gettext("Services Pools");
gettext("Assigned Services");
gettext("Ok");
gettext("Summary");
gettext("Users");
gettext("Groups");
gettext("Logs");

View File

@ -99,7 +99,7 @@
</svg>
</div>
</uds-root>
<script src="/uds/res/admin/runtime.js?stamp=1665662924" defer></script><script src="/uds/res/admin/polyfills-es5.js?stamp=1665662924" nomodule defer></script><script src="/uds/res/admin/polyfills.js?stamp=1665662924" defer></script><script src="/uds/res/admin/main.js?stamp=1665662924" defer></script>
<script src="/uds/res/admin/runtime.js?stamp=1677177369" defer></script><script src="/uds/res/admin/polyfills-es5.js?stamp=1677177369" nomodule defer></script><script src="/uds/res/admin/polyfills.js?stamp=1677177369" defer></script><script src="/uds/res/admin/main.js?stamp=1677177369" defer></script>
</body></html>