@@ -134,7 +134,7 @@ export class SessionController extends BaseController<SessionControllerData> imp
134
134
} ) ) ;
135
135
136
136
const jwt = await this . createToken ( user ) ;
137
- return this . reply ( cmd . context , `user ${ name } joined, signin token: ${ jwt } ` ) ;
137
+ return this . reply ( cmd . context , `user ${ name } joined, sign in token: ${ jwt } ` ) ;
138
138
}
139
139
140
140
public async deleteJoin ( cmd : Command ) : Promise < void > {
@@ -153,30 +153,35 @@ export class SessionController extends BaseController<SessionControllerData> imp
153
153
} ) ;
154
154
155
155
const jwt = await this . createToken ( cmd . context . user ) ;
156
- return this . reply ( cmd . context , `revoked tokens for ${ cmd . context . user . name } , new signin token: ${ jwt } ` ) ;
156
+ return this . reply ( cmd . context , `revoked tokens for ${ cmd . context . user . name } , new sign in token: ${ jwt } ` ) ;
157
157
}
158
158
159
159
public async createSession ( cmd : Command ) : Promise < void > {
160
160
if ( ! cmd . context . source ) {
161
161
return this . reply ( cmd . context , 'no source listener with which to create a session' ) ;
162
162
}
163
163
164
- const jwt = cmd . getHead ( 'token' ) ;
165
- const token = Token . verify ( jwt , this . data . token . secret , {
166
- audience : this . data . token . audience ,
167
- issuer : this . data . token . issuer ,
168
- } ) ;
169
- this . logger . debug ( { token } , 'creating session from token' ) ;
170
-
171
- const user = await this . userRepository . findOneOrFail ( {
172
- id : token . sub ,
173
- } ) ;
174
- await this . userRepository . loadRoles ( user ) ;
175
- this . logger . debug ( { user } , 'logging in user' ) ;
176
-
177
- const session = await cmd . context . source . createSession ( cmd . context . uid , user ) ;
178
- this . logger . debug ( { session, user } , 'created session' ) ;
179
- return this . reply ( cmd . context , 'created session' ) ;
164
+ try {
165
+ const jwt = cmd . getHead ( 'token' ) ;
166
+ const token = Token . verify ( jwt , this . data . token . secret , {
167
+ audience : this . data . token . audience ,
168
+ issuer : this . data . token . issuer ,
169
+ } ) ;
170
+ this . logger . debug ( { token } , 'creating session from token' ) ;
171
+
172
+ const user = await this . userRepository . findOneOrFail ( {
173
+ id : token . sub ,
174
+ } ) ;
175
+ await this . userRepository . loadRoles ( user ) ;
176
+ this . logger . debug ( { user } , 'logging in user' ) ;
177
+
178
+ const session = await cmd . context . source . createSession ( cmd . context . uid , user ) ;
179
+ this . logger . debug ( { session, user } , 'created session' ) ;
180
+ return this . reply ( cmd . context , 'created session' ) ;
181
+ } catch ( err ) {
182
+ this . logger . error ( err , 'error creating session' ) ;
183
+ return this . reply ( cmd . context , err . message ) ;
184
+ }
180
185
}
181
186
182
187
public async getSession ( cmd : Command ) : Promise < void > {
@@ -193,19 +198,24 @@ export class SessionController extends BaseController<SessionControllerData> imp
193
198
}
194
199
195
200
protected async createToken ( user : User ) : Promise < string > {
196
- const now = this . clock . getSeconds ( ) ;
197
- const token = await this . tokenRepository . save ( new Token ( {
201
+ const issued = this . clock . getSeconds ( ) ;
202
+ const expires = issued + this . data . token . duration ;
203
+ this . logger . debug ( { expires, issued } , 'creating token' ) ;
204
+
205
+ const tokenPre = new Token ( {
198
206
audience : this . data . token . audience ,
199
- createdAt : this . clock . getDate ( now ) ,
207
+ createdAt : this . clock . getDate ( issued ) ,
200
208
data : { } ,
201
- expiresAt : this . clock . getDate ( now + this . data . token . duration ) ,
209
+ expiresAt : this . clock . getDate ( expires ) ,
202
210
grants : this . data . join . grants ,
203
211
issuer : this . data . token . issuer ,
204
212
labels : { } ,
205
213
subject : user . id ,
206
214
user,
207
- } ) ) ;
208
- this . logger . debug ( { token } , 'signing token' ) ;
215
+ } ) ;
216
+
217
+ const token = await this . tokenRepository . save ( tokenPre ) ;
218
+ this . logger . debug ( { expires, issued, token } , 'signing token' ) ;
209
219
return token . sign ( this . data . token . secret ) ;
210
220
}
211
221
}
0 commit comments