@startuml ConsolidateFacebookLogin
title Facebook Login Sequence Diagram for ConSOLIDate.org

actor User
participant "ConSOLIDate.org" as App
participant "Spring Security" as Security
participant "Facebook OAuth2" as Facebook

User -> App: Open Home Page
App -> User: Display Login Options ("Login by Facebook")

User -> App: Click "Login with Facebook" Button
App -> Security: Redirect to Facebook OAuth2 Authorization URL
Security -> Facebook: Redirect User to Facebook OAuth2 Authorization URL
Facebook -> User: Display Facebook Login Page

alt User provides credentials
    User -> Facebook: Provide Facebook Credentials
    Facebook -> Security: OAuth2 Authorization Code
    Security -> App: Redirect with Authorization Code
    App -> Security: Exchange Code for Access Token
    Security -> Facebook: Request Access Token
    Facebook -> Security: Access Token and User Info Endpoint URL
    Security -> App: Access Token and User Info Endpoint URL
    App -> Facebook: Retrieve User Info
    Facebook -> App: User Info
    App -> User: Display "Welcome <Name> <Surname> to ConSOLIDate.org"
else User cancels login
    User -> Facebook: Cancel Login
    Facebook -> Security: Redirect with Error
    Security -> App: Redirect with Error
    App -> User: Show Login Page
end
@enduml
