@@ -3,13 +3,14 @@ import getConfig from 'next/config';
3
3
import { sign } from 'jsonwebtoken' ;
4
4
import { getSession } from 'next-auth/client' ;
5
5
import { apiFetch } from '@codeday/topo/utils' ;
6
- import { StudentMentorQuery } from './dashRedirect.gql' ;
6
+ import { StudentMentorQuery , NextEventQuery } from './dashRedirect.gql' ;
7
+ import { DateTime } from 'luxon' ;
7
8
8
9
const { serverRuntimeConfig } = getConfig ( ) ;
9
10
10
- function makeToken ( { typ, sid, tgt } ) {
11
+ function makeToken ( { typ, sid, tgt, evt } ) {
11
12
return sign (
12
- { typ, sid, tgt } ,
13
+ { typ, sid, tgt, evt } ,
13
14
serverRuntimeConfig . gql . secret ,
14
15
{ audience : serverRuntimeConfig . gql . audience , expiresIn : '31d' , noTimestamp : true }
15
16
) ;
@@ -19,8 +20,12 @@ export default async function (req, res) {
19
20
const session = await getSession ( { req } ) ;
20
21
if ( ! session ?. user ?. nickname ) return res . send ( null ) ;
21
22
23
+ const { cms } = await apiFetch ( print ( NextEventQuery ) , { now : DateTime . now ( ) . toISO ( ) } ) ;
24
+ const evt = cms ?. events ?. items ?. [ 0 ] ?. id ;
25
+ if ( ! evt ) return res . send ( null ) ;
26
+
22
27
const username = session . user . nickname ;
23
- const adminToken = makeToken ( { typ : 'a' } ) ;
28
+ const adminToken = makeToken ( { typ : 'a' , evt } ) ;
24
29
const accountToken = sign ( { scopes : `read:users` } , serverRuntimeConfig . gql . accountSecret , { expiresIn : '5m' } ) ;
25
30
26
31
const { labs, account } = await apiFetch (
@@ -39,10 +44,10 @@ export default async function (req, res) {
39
44
40
45
const tokens = {
41
46
a : isAdmin && adminToken ,
42
- mm : ( isAdmin || isManager ) && makeToken ( { typ : 'mm' , sid : username , tgt : 'u' } ) ,
43
- r : ( isAdmin || isReviewer ) && makeToken ( { typ : 'r' , sid : username , tgt : 'u' } ) ,
44
- m : labs ?. mentor ?. id && makeToken ( { typ : 'm' , sid : labs . mentor . id , tgt : 'i' } ) ,
45
- s : labs ?. student ?. id && makeToken ( { typ : 's' , sid : labs . student . id , tgt : 'i' } ) ,
47
+ mm : ( isAdmin || isManager ) && makeToken ( { typ : 'mm' , sid : username , tgt : 'u' , evt } ) ,
48
+ r : ( isAdmin || isReviewer ) && makeToken ( { typ : 'r' , sid : username , tgt : 'u' , evt } ) ,
49
+ m : labs ?. mentor ?. id && makeToken ( { typ : 'm' , sid : labs . mentor . id , tgt : 'i' , evt } ) ,
50
+ s : labs ?. student ?. id && makeToken ( { typ : 's' , sid : labs . student . id , tgt : 'i' , evt } ) ,
46
51
} ;
47
52
48
53
return res . send ( Object . keys ( tokens )
0 commit comments