@startuml
actor Player
boundary Browser

box "Twitter Integration (AWS)"
participant StartAuth
participant "Register\n(complete-auth)" as Register
participant ManageUser
participant Webhook
database DynamoDB
control KMS
end box

boundary Twitter

box "Integromat"
control "Register User" as RegisterUser
end box

box "Knack"
participant Login as KnackLogin
entity Account as KnackAccount
end box

Player --> Browser++: Signup
Browser --> Twitter++
activate Register
...Authenticate...
Register <-- Twitter--: return <i>access-token & key</i>
Register -> Register: Generate auth-token
Register -> KMS++: access-token & key
return <i>Encrypted tokens</i>
Register -> DynamoDB: Save Encrypted Tokens
Browser <-- Register--: <i>Redirect to approve signup page with\n-screen name\n-suggested message\n-auth-token
return <i>Approve Signup page</i>

Player -> Browser++: Agree
Browser -> ManageUser++: Register\n- auth-token\n- initial tweet
ManageUser --> RegisterUser++: Start Registration\n- user_id\n- screen_name\n- password\n- connection_id\n-initial_tweet
Browser <-- ManageUser--: Registration Started
Player <-- Browser: Registration Started

Browser --> ManageUser++: Keep Alive\n- auth-token
return Going slow message
Player <-- Browser: Going slow message

RegisterUser <<- KnackAccount: User Exists?
RegisterUser ->> KnackAccount: Create / Update User
Webhook <-- RegisterUser: Registration Complete\n- user_id\n- screen_name\n- password\n-connection_id
activate Webhook
Webhook -> KMS++: Encrypt Password
return Encrypted Password
Webhook ->> DynamoDB: Save User w/\nEncrypted Password
Browser <-- Webhook: Registration Complete
return
deactivate RegisterUser
Browser -> KnackLogin++: Start Login\n- auth-token
...Login to Knack...

@enduml