Skip to content

Commit fc20f33

Browse files
committed
Fix update method
1 parent faed624 commit fc20f33

File tree

1 file changed

+42
-5
lines changed

1 file changed

+42
-5
lines changed

ssh_manager_backend/app/models/access_control.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,26 @@ class AccessControlModel:
1010
def __init__(self):
1111
self.session = db_session()
1212

13+
def create(self, username: str):
14+
"""
15+
Creates an entry in the access_control table for the given user.
16+
17+
:param username
18+
:return: boolean value whether the entry is created or not.
19+
"""
20+
21+
try:
22+
acl_details: AccessControl = AccessControl(
23+
username=username, ip_addresses=[]
24+
)
25+
self.session.add(acl_details)
26+
self.session.commit()
27+
except SQLAlchemyError:
28+
self.session.rollback()
29+
return False
30+
31+
return True
32+
1333
def has_access(self, username: str, ip_address: str) -> bool:
1434
"""
1535
Checks whether a user has access to the provided the list of ip addresses.
@@ -43,13 +63,21 @@ def grant_access(self, username: str, ip_addresses: List[str]) -> bool:
4363

4464
acl_details.ip_addresses += ip_addresses
4565
acl_details.ip_addresses = list(set(acl_details.ip_addresses))
66+
67+
self.session.query(AccessControl).filter(
68+
AccessControl.username == username
69+
).update({"ip_addresses": acl_details.ip_addresses})
70+
4671
self.session.commit()
47-
except [AttributeError, SQLAlchemyError]:
72+
except AttributeError:
73+
return False
74+
except SQLAlchemyError:
75+
self.session.rollback()
4876
return False
4977

5078
return True
5179

52-
def remove_access(self, username: str, ip_addresses: List[str]) -> bool:
80+
def revoke_access(self, username: str, ip_addresses: List[str]) -> bool:
5381
"""
5482
Updates user access.
5583
@@ -64,10 +92,19 @@ def remove_access(self, username: str, ip_addresses: List[str]) -> bool:
6492
).first()
6593

6694
for ip in ip_addresses:
67-
acl_details.ip_addresses.remove(ip)
95+
try:
96+
acl_details.ip_addresses.remove(ip)
97+
except ValueError:
98+
continue
6899

100+
self.session.query(AccessControl).filter(
101+
AccessControl.username == username
102+
).update({"ip_addresses": acl_details.ip_addresses})
69103
self.session.commit()
70-
except [AttributeError, SQLAlchemyError]:
104+
except AttributeError:
105+
return False
106+
except SQLAlchemyError:
107+
self.session.rollback()
71108
return False
72109

73110
return True
@@ -85,5 +122,5 @@ def get_all_ips(self, username: str) -> List[str]:
85122
AccessControl.username == username
86123
).first()
87124
return acl_details.ip_addresses
88-
except [AttributeError, SQLAlchemyError]:
125+
except (AttributeError, SQLAlchemyError):
89126
return []

0 commit comments

Comments
 (0)