2022-09-06 19:13:32 +00:00
package connections
import (
"cwtch.im/cwtch/event"
"cwtch.im/cwtch/protocol/groups"
2022-10-11 17:58:10 +00:00
"encoding/base64"
2022-09-06 19:13:32 +00:00
"git.openprivacy.ca/cwtch.im/tapir/primitives/privacypass"
"strconv"
)
// Implement Token Service Handler for Engine
// GroupMessageHandler receives a server and an encrypted group message
func ( e * engine ) GroupMessageHandler ( server string , gm * groups . EncryptedGroupMessage ) {
e . receiveGroupMessage ( server , gm )
}
2022-10-11 17:58:10 +00:00
// PostingFailed notifies a peer that a message failed to post
func ( e * engine ) PostingFailed ( group string , sig [ ] byte ) {
e . eventManager . Publish ( event . NewEvent ( event . SendMessageToGroupError , map [ event . Field ] string { event . GroupID : group , event . Error : "failed to post message" , event . Signature : base64 . StdEncoding . EncodeToString ( sig ) } ) )
}
2022-09-06 19:13:32 +00:00
// ServerAuthedHandler is notified when a server has successfully authed
func ( e * engine ) ServerAuthedHandler ( server string ) {
e . serverAuthed ( server )
}
// ServerSyncedHandler is notified when a server has successfully synced
func ( e * engine ) ServerSyncedHandler ( server string ) {
e . serverSynced ( server )
}
// ServerClosedHandler is notified when a server connection has closed, the result is ignored during shutdown...
func ( e * engine ) ServerClosedHandler ( server string ) {
e . ignoreOnShutdown ( e . serverDisconnected ) ( server )
}
// NewTokenHandler is notified after a successful token acquisition
func ( e * engine ) NewTokenHandler ( tokenService string , tokens [ ] * privacypass . Token ) {
2022-10-11 17:58:10 +00:00
tokenManagerPointer , _ := e . tokenManagers . LoadOrStore ( tokenService , NewTokenManager ( ) )
2022-09-06 19:13:32 +00:00
tokenManager := tokenManagerPointer . ( * TokenManager )
2022-11-23 16:01:22 +00:00
tokenManager . StoreNewTokens ( tokens )
2022-09-06 19:13:32 +00:00
e . eventManager . Publish ( event . NewEvent ( event . TokenManagerInfo , map [ event . Field ] string { event . ServerTokenOnion : tokenService , event . ServerTokenCount : strconv . Itoa ( tokenManager . NumTokens ( ) ) } ) )
}
// FetchToken is notified when a server requires a new token from the client
func ( e * engine ) FetchToken ( tokenService string ) ( * privacypass . Token , int , error ) {
2022-10-11 17:58:10 +00:00
tokenManagerPointer , _ := e . tokenManagers . LoadOrStore ( tokenService , NewTokenManager ( ) )
2022-09-06 19:13:32 +00:00
tokenManager := tokenManagerPointer . ( * TokenManager )
2022-09-07 16:27:04 +00:00
token , numTokens , err := tokenManager . FetchToken ( )
e . eventManager . Publish ( event . NewEvent ( event . TokenManagerInfo , map [ event . Field ] string { event . ServerTokenOnion : tokenService , event . ServerTokenCount : strconv . Itoa ( numTokens ) } ) )
return token , numTokens , err
2022-09-06 19:13:32 +00:00
}
2023-05-02 19:26:46 +00:00
func ( e * engine ) PokeTokenCount ( tokenService string ) {
tokenManagerPointer , _ := e . tokenManagers . LoadOrStore ( tokenService , NewTokenManager ( ) )
tokenManager := tokenManagerPointer . ( * TokenManager )
e . eventManager . Publish ( event . NewEvent ( event . TokenManagerInfo , map [ event . Field ] string { event . ServerTokenOnion : tokenService , event . ServerTokenCount : strconv . Itoa ( tokenManager . NumTokens ( ) ) } ) )
}