From 0ed6eb70296ffe65b3b91c1a9da7c28744d62533 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Mon, 29 Jul 2024 11:13:35 -0600 Subject: [PATCH] Fix sessions (#2689) * add loggedIn key to sessions * show loggedIn timestamp in list * don't double hash active session --------- Co-authored-by: Aiden McClelland --- core/startos/src/auth.rs | 4 ++-- core/startos/src/util/sync.rs | 3 +++ .../server-routes/sessions/sessions.page.html | 22 +++++++++++++++---- .../server-routes/sessions/sessions.page.ts | 20 +++++------------ .../ui/src/app/services/api/api.fixures.ts | 2 ++ .../ui/src/app/services/api/api.types.ts | 1 + 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/core/startos/src/auth.rs b/core/startos/src/auth.rs index 68e16c244..d998e9897 100644 --- a/core/startos/src/auth.rs +++ b/core/startos/src/auth.rs @@ -350,13 +350,13 @@ pub async fn list( ListParams { session, .. }: ListParams, ) -> Result { let mut sessions = ctx.db.peek().await.into_private().into_sessions().de()?; - ctx.ephemeral_sessions.mutate(|s| { + ctx.ephemeral_sessions.peek(|s| { sessions .0 .extend(s.0.iter().map(|(k, v)| (k.clone(), v.clone()))) }); Ok(SessionList { - current: HashSessionToken::from_token(session).hashed().clone(), + current: session, sessions, }) } diff --git a/core/startos/src/util/sync.rs b/core/startos/src/util/sync.rs index f8ec425e0..1edd21ce1 100644 --- a/core/startos/src/util/sync.rs +++ b/core/startos/src/util/sync.rs @@ -6,4 +6,7 @@ impl SyncMutex { pub fn mutate U, U>(&self, f: F) -> U { f(&mut *self.0.lock().unwrap()) } + pub fn peek U, U>(&self, f: F) -> U { + f(&*self.0.lock().unwrap()) + } } diff --git a/web/projects/ui/src/app/pages/server-routes/sessions/sessions.page.html b/web/projects/ui/src/app/pages/server-routes/sessions/sessions.page.html index 3e349b49b..2473e6041 100644 --- a/web/projects/ui/src/app/pages/server-routes/sessions/sessions.page.html +++ b/web/projects/ui/src/app/pages/server-routes/sessions/sessions.page.html @@ -52,8 +52,15 @@ >

{{ getPlatformName(currentSession.metadata.platforms) }}

-

Last Active: {{ currentSession.lastActive| date : 'medium' }}

-

{{ currentSession.userAgent }}

+

{{ agent }}

+

+ First Seen + : {{ currentSession.loggedIn| date : 'medium' }} +

+

+ Last Active + : {{ currentSession.lastActive| date : 'medium' }} +

@@ -78,8 +85,15 @@ >

{{ getPlatformName(session.metadata.platforms) }}

-

Last Active: {{ session.lastActive | date : 'medium' }}

-

{{ session.userAgent }}

+

{{ agent }}

+

+ First Seen + : {{ currentSession.loggedIn| date : 'medium' }} +

+

+ Last Active + : {{ currentSession.lastActive| date : 'medium' }} +

{ - return { - id, - ...session, - } - }) - .sort((a, b) => { - return ( - new Date(b.lastActive).valueOf() - new Date(a.lastActive).valueOf() - ) - }) + .map(([id, session]) => ({ id, ...session })) + .sort( + (a, b) => + new Date(b.lastActive).valueOf() - new Date(a.lastActive).valueOf(), + ) } catch (e: any) { this.errorService.handleError(e) } finally { @@ -108,10 +102,6 @@ export class SessionsPage { return 'Unknown Device' } } - - asIsOrder(a: any, b: any) { - return 0 - } } interface SessionWithId extends Session { diff --git a/web/projects/ui/src/app/services/api/api.fixures.ts b/web/projects/ui/src/app/services/api/api.fixures.ts index 23545d6b3..d1ce9c47c 100644 --- a/web/projects/ui/src/app/services/api/api.fixures.ts +++ b/web/projects/ui/src/app/services/api/api.fixures.ts @@ -924,6 +924,7 @@ export module Mock { current: 'b7b1a9cef4284f00af9e9dda6e676177', sessions: { '9513226517c54ddd8107d6d7b9d8aed7': { + loggedIn: '2021-07-14T20:49:17.774Z', lastActive: '2021-07-14T20:49:17.774Z', userAgent: 'AppleWebKit/{WebKit Rev} (KHTML, like Gecko)', metadata: { @@ -931,6 +932,7 @@ export module Mock { }, }, b7b1a9cef4284f00af9e9dda6e676177: { + loggedIn: '2021-07-14T20:49:17.774Z', lastActive: '2021-06-14T20:49:17.774Z', userAgent: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0', diff --git a/web/projects/ui/src/app/services/api/api.types.ts b/web/projects/ui/src/app/services/api/api.types.ts index eac7cd7f4..faa4a072e 100644 --- a/web/projects/ui/src/app/services/api/api.types.ts +++ b/web/projects/ui/src/app/services/api/api.types.ts @@ -354,6 +354,7 @@ export interface Metric { } export interface Session { + loggedIn: string lastActive: string userAgent: string metadata: SessionMetadata