mirror of https://github.com/JAJames/RenX-UMLs.git
Jessica James
5 years ago
commit
c40e8c0235
5 changed files with 267 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
.idea/ |
@ -0,0 +1,50 @@ |
|||||
|
@startuml |
||||
|
|
||||
|
allowmixing |
||||
|
|
||||
|
enum AuthRequestStatus { |
||||
|
Success // Logged in successfully |
||||
|
Failure // bad token, bad credentials |
||||
|
Timeout // API didn't respond |
||||
|
RequestInProgress // Still waiting for response |
||||
|
} |
||||
|
|
||||
|
class DllBind { |
||||
|
+bool ClearCachedAuthID(); |
||||
|
|
||||
|
+bool StartVerifyCachedAuthID(int timeout_ms); |
||||
|
+void StartLoginRequest(string user, string password); |
||||
|
+void StartJoinServerRequest(string serverIP, int serverPort); |
||||
|
+AuthRequestStatus CheckAuthRequest(); |
||||
|
} |
||||
|
|
||||
|
cloud "Website / AuthServer API" { |
||||
|
class /register { |
||||
|
Type: Post |
||||
|
Payload: Email, Username, Password |
||||
|
Response: Success/Failure |
||||
|
} |
||||
|
|
||||
|
class /validate { |
||||
|
Type: Post |
||||
|
Payload: AuthID, UserID |
||||
|
Response: Success/Failure |
||||
|
} |
||||
|
|
||||
|
class /login { |
||||
|
Type: Post |
||||
|
Payload: Email or Username, Password |
||||
|
Response: Success/Failure |
||||
|
} |
||||
|
|
||||
|
class /resetPassword { |
||||
|
Type: Post |
||||
|
Payload: Email or Username |
||||
|
Failure Response: No such account |
||||
|
Success Response: Check your email |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
hide empty members |
||||
|
|
||||
|
@enduml |
@ -0,0 +1,57 @@ |
|||||
|
@startuml |
||||
|
|
||||
|
together { |
||||
|
actor "New Player" as NewUser |
||||
|
actor "Old Player" as OldUser |
||||
|
|
||||
|
note left of NewUser { |
||||
|
This is any player who has |
||||
|
only been in this match |
||||
|
} |
||||
|
|
||||
|
note right of OldUser { |
||||
|
This is any player who was |
||||
|
also in the previous match |
||||
|
|
||||
|
We trust this guy a little more, |
||||
|
because the DDoSer probably isn't |
||||
|
playing real games. |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
cloud "Public Proxy Servers" as PubProxies { |
||||
|
node cmg1 |
||||
|
node cmg2 |
||||
|
} |
||||
|
|
||||
|
note bottom of PubProxies |
||||
|
These are the only nodes |
||||
|
put on the server list |
||||
|
end note |
||||
|
|
||||
|
cloud "Private Proxy Servers" as PrivProxies { |
||||
|
node bong1 |
||||
|
|
||||
|
note as PrivProxiesNote |
||||
|
We move previous players here so that when |
||||
|
the public proxy servers are inevitably taken |
||||
|
down, these guys won't get disconnected! |
||||
|
end note |
||||
|
} |
||||
|
|
||||
|
cloud "Private Game Servers" as PrivServers { |
||||
|
node "Official NA" as NA1 |
||||
|
node "Official EU" as EU1 |
||||
|
|
||||
|
note as PrivServersNote |
||||
|
These are never exposed, to anybody at all |
||||
|
end note |
||||
|
} |
||||
|
|
||||
|
NewUser --> PubProxies |
||||
|
OldUser --> PrivProxies |
||||
|
PubProxies --> PrivServers |
||||
|
PrivProxies --> PrivServers |
||||
|
NewUser ..> PrivProxies : Used only when in failover |
||||
|
|
||||
|
@enduml |
@ -0,0 +1,96 @@ |
|||||
|
@startuml |
||||
|
|
||||
|
box User (Untrusted) |
||||
|
participant User |
||||
|
participant "Game Client" as Game |
||||
|
participant "DLL Bind" as DllBind |
||||
|
participant "Windows Registry" as Registry |
||||
|
end box |
||||
|
|
||||
|
box Official Infrastructure (Trusted) #LightBlue |
||||
|
participant "Renegade X Website" as AuthServer |
||||
|
end box |
||||
|
|
||||
|
User -> Game: Launch |
||||
|
Game -> User: Loading Screen (intro video) |
||||
|
group Validate Cached AuthID |
||||
|
Game -> DllBind: StartVerifyCachedAuthID() |
||||
|
DllBind -> Registry: Read AuthToken |
||||
|
activate Registry |
||||
|
return AuthToken value |
||||
|
alt AuthToken exists |
||||
|
DllBind -> AuthServer: Validate AuthID Request |
||||
|
DllBind -> Game: True (Request started) |
||||
|
loop Wait for response |
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: RequestInProgress |
||||
|
end |
||||
|
alt Authentication success |
||||
|
AuthServer --> DllBind: Authentication Token, ID |
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: Success |
||||
|
Game -> User: Go to main menu / join server |
||||
|
else Authentication failed |
||||
|
AuthServer --> DllBind: Authentication Failed |
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: Failure |
||||
|
Game -> User: Go to Login Screen |
||||
|
else Authentication Server Offline / No Response |
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: Timeout |
||||
|
Game -> User: "Unable to login; continue anyways?" |
||||
|
alt User clicks 'Yes' |
||||
|
User -> Game: Yes |
||||
|
Game -> User: Go to main menu / join server |
||||
|
else User clicks 'Exit' |
||||
|
User -> Game: Exit |
||||
|
Game -> Game: Exit |
||||
|
end |
||||
|
end |
||||
|
else |
||||
|
DllBind -> Game: False (No cached credentials) |
||||
|
Game -> User: Go to Login |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
group Login |
||||
|
User -> Game: Login Credentials |
||||
|
Game -> DllBind: StartLoginRequest() |
||||
|
DllBind -> AuthServer: Authentication Request |
||||
|
DllBind --> Game |
||||
|
|
||||
|
loop Wait for response |
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: RequestInProgress |
||||
|
end |
||||
|
|
||||
|
alt Authentication Success |
||||
|
AuthServer --> DllBind: Authentication Token, UserID |
||||
|
opt Remember Me Checkbox Checked |
||||
|
DllBind -> Registry: Store AuthID, UserID |
||||
|
activate Registry |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: Success |
||||
|
Game --> User: Login Success; go to main menu / join server |
||||
|
else Authentication Failure |
||||
|
AuthServer --> DllBind: Authentication Failed |
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: Failure |
||||
|
Game --> User: Display error; repeat Login |
||||
|
else Authentication Server Offline / No Response |
||||
|
Game -> DllBind: CheckAuthRequest() |
||||
|
DllBind --> Game: Timeout |
||||
|
Game -> User: "Unable to login; continue anyways?" |
||||
|
alt User clicks 'Yes' |
||||
|
User -> Game: Yes |
||||
|
Game -> User: Go to main menu / join server |
||||
|
else User clicks 'Exit' |
||||
|
Game -> Game: Exit |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
@enduml |
@ -0,0 +1,63 @@ |
|||||
|
@startuml |
||||
|
|
||||
|
box User (Untrusted) |
||||
|
participant User |
||||
|
participant "Game Client" as Game |
||||
|
participant DllBind |
||||
|
end box |
||||
|
|
||||
|
box Game Server Infrastructure (Untrusted) |
||||
|
participant "Game Server" as GameServer |
||||
|
participant RCON |
||||
|
end box |
||||
|
|
||||
|
box Official Infrastructure (Trusted) #LightBlue |
||||
|
participant "DevBot" as DevBot |
||||
|
participant "Renegade X Website" as AuthServer |
||||
|
end box |
||||
|
|
||||
|
Game <-> GameServer: Normal UDK Game Join |
||||
|
== Begin Normal Game Play == |
||||
|
|
||||
|
Game -> GameServer: HWID |
||||
|
|
||||
|
group Token Validation |
||||
|
Game -> DllBind: StartJoinServerRequest(IP, Port) |
||||
|
DllBind -> DevBot: Auth Payload |
||||
|
note left |
||||
|
Note: Validation needs to go through the DevBot, |
||||
|
so that the DevBot can get a verifiable response |
||||
|
from the AuthServer. Otherwise, the ID would have |
||||
|
to be validated twice -- once by the game server, |
||||
|
and once by the DevBot. |
||||
|
|
||||
|
Additionally, if the DevBot is offline, then no |
||||
|
response will actually be received. This means the |
||||
|
player is neither authenticated, nor kicked. They're |
||||
|
just unauthenticated by default. |
||||
|
end note |
||||
|
|
||||
|
opt DevBot online |
||||
|
DevBot -> AuthServer: Validate ID Request |
||||
|
alt Token is valid |
||||
|
AuthServer --> DevBot: Validation Success |
||||
|
DevBot -> GameServer: Auth Success for ID |
||||
|
GameServer -> RCON: Auth Success for ID |
||||
|
else Token is bad |
||||
|
AuthServer --> DevBot: Validation Failure |
||||
|
DevBot -> GameServer: Kick Player, Reason: "Invalid Login" |
||||
|
GameServer -> Game: Kick Player |
||||
|
Game -> User: Present Login Screen |
||||
|
else Site Offline / Timed Out |
||||
|
DevBot -> GameServer: Auth Failure for ID |
||||
|
GameServer -> RCON: Auth Failure for ID |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
else Invalid Client (Client Doesn't Send Payload) |
||||
|
DevBot -> GameServer: Kick Player, Reason: "Invalid Login" |
||||
|
note right: Caused by 3 second timeout |
||||
|
GameServer -> Game: Kick Player, Reason: "Invalid Login" |
||||
|
end |
||||
|
|
||||
|
@enduml |
Loading…
Reference in new issue