Skip to content

Commit 70d6cc4

Browse files
authored
Merge pull request #154 from britive/develop
v4.3.0
2 parents 8e88749 + 59ddf73 commit 70d6cc4

File tree

4 files changed

+86
-1
lines changed

4 files changed

+86
-1
lines changed

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
# Change Log (v2.8.1+)
22

3+
## v4.3.0 [2025-07-08]
4+
5+
__What's New:__
6+
7+
* Added `security.active_sessions` functionality to allow administrative session management.
8+
9+
__Enhancements:__
10+
11+
* None
12+
13+
__Bug Fixes:__
14+
15+
* None
16+
17+
__Dependencies:__
18+
19+
* None
20+
21+
__Other:__
22+
23+
* None
24+
325
## v4.2.0 [2025-05-30]
426

527
__What's New:__

src/britive/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '4.2.0'
1+
__version__ = '4.3.0'

src/britive/security/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from .active_sessions import ActiveSessions
12
from .api_tokens import ApiTokens
23
from .policies import SecurityPolicies
34
from .saml import Saml
@@ -6,6 +7,7 @@
67

78
class Security:
89
def __init__(self, britive) -> None:
10+
self.active_sessions = ActiveSessions(britive)
911
self.api_tokens = ApiTokens(britive)
1012
self.saml = Saml(britive)
1113
self.security_policies = SecurityPolicies(britive)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
class ActiveSessions:
2+
def __init__(self, britive) -> None:
3+
self.britive = britive
4+
self.base_urls = {
5+
'applications': f'{self.britive.base_url}/paps/sessions',
6+
'resources': f'{self.britive.base_url}/resource-manager/sessions',
7+
}
8+
9+
def list_users(self, search_text: str = None) -> list:
10+
"""
11+
Retrieve a list of users with active session(s), i.e. checked out profiles.
12+
13+
:return: List of users with active session(s).
14+
"""
15+
16+
params = {}
17+
18+
if search_text:
19+
params['searchText'] = search_text
20+
21+
return self.britive.get(self.base_urls['applications'], params=params)
22+
23+
def list_user_sessions(self, user_id: str) -> dict:
24+
"""
25+
Retrieve the active sessions (checked out profiles) of a given user.
26+
27+
:param user_id: The target user's ID.
28+
:return: Dict of the user's active Application and Resources sessions.
29+
"""
30+
31+
return {
32+
'applications': self.britive.get(f'{self.base_urls["applications"]}/{user_id}'),
33+
'resources': self.britive.get(f'{self.base_urls["resources"]}/{user_id}'),
34+
}
35+
36+
def checkin(self, user_id: str, profile_ids: list) -> None:
37+
"""
38+
Checkin one or more active profile sessions for a given user.
39+
40+
:param user_id: The target user's ID.
41+
:param profile_ids: List of target profile ID(s) to checkin.
42+
:return: None
43+
"""
44+
for transaction_id, profile_type in {
45+
session['transactionId']: profile_type
46+
for profile_type, sessions in self.list_user_sessions(user_id).items()
47+
for session in sessions
48+
if session.get('papId', session.get('profileId')) in profile_ids
49+
}.items():
50+
self.britive.delete(f'{self.base_urls[profile_type]}/{transaction_id}')
51+
52+
def checkin_all(self, user_id: str) -> None:
53+
"""
54+
Checkin all active profiles sessions for a given user.
55+
56+
:param user_id: The target user's ID
57+
:return: None
58+
"""
59+
60+
self.britive.delete(f'{self.base_urls["applications"]}/user/{user_id}')
61+
self.britive.delete(f'{self.base_urls["resources"]}/checkin-all/{user_id}')

0 commit comments

Comments
 (0)