@@ -10,21 +10,23 @@ namespace Shuttle.Access.Application;
1010
1111public class RegisterSessionParticipant : IParticipant < RegisterSession >
1212{
13+ private readonly ISessionTokenExchangeRepository _sessionTokenExchangeRepository ;
1314 private readonly AccessOptions _accessOptions ;
1415 private readonly IAuthenticationService _authenticationService ;
1516 private readonly IAuthorizationService _authorizationService ;
1617 private readonly IIdentityQuery _identityQuery ;
1718 private readonly ISessionQuery _sessionQuery ;
1819 private readonly ISessionRepository _sessionRepository ;
1920
20- public RegisterSessionParticipant ( IOptions < AccessOptions > accessOptions , IAuthenticationService authenticationService , IAuthorizationService authorizationService , ISessionRepository sessionRepository , ISessionQuery sessionQuery , IIdentityQuery identityQuery )
21+ public RegisterSessionParticipant ( IOptions < AccessOptions > accessOptions , IAuthenticationService authenticationService , IAuthorizationService authorizationService , ISessionRepository sessionRepository , ISessionQuery sessionQuery , IIdentityQuery identityQuery , ISessionTokenExchangeRepository sessionTokenExchangeRepository )
2122 {
2223 _accessOptions = Guard . AgainstNull ( accessOptions ) . Value ;
2324 _authenticationService = Guard . AgainstNull ( authenticationService ) ;
2425 _sessionQuery = Guard . AgainstNull ( sessionQuery ) ;
2526 _authorizationService = Guard . AgainstNull ( authorizationService ) ;
2627 _sessionRepository = Guard . AgainstNull ( sessionRepository ) ;
2728 _identityQuery = Guard . AgainstNull ( identityQuery ) ;
29+ _sessionTokenExchangeRepository = Guard . AgainstNull ( sessionTokenExchangeRepository ) ;
2830 }
2931
3032 public async Task ProcessMessageAsync ( IParticipantContext < RegisterSession > context )
@@ -71,14 +73,14 @@ public async Task ProcessMessageAsync(IParticipantContext<RegisterSession> conte
7173 }
7274 }
7375
74- if ( ( await _identityQuery . SearchAsync ( new DataAccess . Query . Identity . Specification ( ) . WithName ( message . IdentityName ) , context . CancellationToken ) ) . SingleOrDefault ( ) == null )
76+ if ( ( await _identityQuery . SearchAsync ( new DataAccess . Identity . Specification ( ) . WithName ( message . IdentityName ) , context . CancellationToken ) ) . SingleOrDefault ( ) == null )
7577 {
7678 message . UnknownIdentity ( ) ;
7779
7880 return ;
7981 }
8082
81- var specification = new DataAccess . Query . Session . Specification ( ) ;
83+ var specification = new DataAccess . Session . Specification ( ) ;
8284
8385 if ( message . RegistrationType == SessionRegistrationType . Token )
8486 {
@@ -127,6 +129,8 @@ public async Task ProcessMessageAsync(IParticipantContext<RegisterSession> conte
127129 message . Registered ( session ) ;
128130 }
129131
132+ return ;
133+
130134 async Task SaveAsync ( )
131135 {
132136 foreach ( var permission in await _authorizationService . GetPermissionsAsync ( message . IdentityName , context . CancellationToken ) )
@@ -135,6 +139,15 @@ async Task SaveAsync()
135139 }
136140
137141 await _sessionRepository . SaveAsync ( session , context . CancellationToken ) ;
142+
143+ if ( message . HasKnownApplicationOptions )
144+ {
145+ var sessionTokenExchange = new SessionTokenExchange ( Guid . NewGuid ( ) , session . Token , DateTime . UtcNow . Add ( _accessOptions . SessionTokenExchangeValidityTimeSpan ) ) ;
146+
147+ await _sessionTokenExchangeRepository . SaveAsync ( sessionTokenExchange , context . CancellationToken ) ;
148+
149+ message . WithSessionTokenExchangeUrl ( $ "{ message . KnownApplicationOptions ! . SessionTokenExchangeUrl } /{ sessionTokenExchange . ExchangeToken } ") ;
150+ }
138151 }
139152 }
140153}
0 commit comments