diff --git a/README.md b/README.md index 725b10d..4ac9893 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,13 @@ Web server for WebDAV resources ## Architecture + + ### File streaming + +## Dependencies + +* Garage (https://hub.docker.com/r/dxflrs/garage) +* PostgreSQL diff --git a/assets/components.png b/assets/components.png new file mode 100644 index 0000000..eab0be6 Binary files /dev/null and b/assets/components.png differ diff --git a/assets/components.puml b/assets/components.puml new file mode 100644 index 0000000..6682460 --- /dev/null +++ b/assets/components.puml @@ -0,0 +1,29 @@ +@startuml + +actor "Client" + +agent "Pathfinder" + +agent "Sentinel" +database "Session PostgreSQL" +"Sentinel" -- "Session PostgreSQL" + +boundary "Mailman" +cloud "Mail Service" +"Mailman" -- "Mail Service" + +agent "Keeper" +database "Account PostgreSQL" +"Keeper" -- "Account PostgreSQL" + +agent "Fileye" +cloud "S3 storage" +"Fileye" -- "S3 storage" + +"Client" ~~ "Pathfinder" +"Pathfinder" ~~ "Sentinel" +"Pathfinder" ~~ "Keeper" +"Pathfinder" ~~ "Fileye" +"Pathfinder" ~~ "Mailman" + +@enduml diff --git a/assets/components.svg b/assets/components.svg new file mode 100644 index 0000000..930c4c4 --- /dev/null +++ b/assets/components.svg @@ -0,0 +1 @@ +ClientPathfinderSentinelSession PostgreSQLMailmanMail ServiceKeeperAccount PostgreSQLFileyeS3 storage \ No newline at end of file diff --git a/assets/session.puml b/assets/session.puml new file mode 100644 index 0000000..64449d7 --- /dev/null +++ b/assets/session.puml @@ -0,0 +1,55 @@ +@startuml + +group Register +Client -> Pathfinder : E-Mail + Login form +Pathfinder -> Keeper : Save account info +alt No errors +Keeper -> Pathfinder : E-Mail address +Pathfinder -> Mailman : Send sign-in url with TOKEN +Pathfinder -> Client : OK with Check e-mail +else Invalid data +Keeper -> Pathfinder : Failed +Pathfinder -> Client : BAD_REQUEST with errors +end +end + +group Sign In (First step) +Client -> Pathfinder : Send Login form +Pathfinder -> Keeper : Load user profile +alt Valid +Keeper -> Pathfinder : User e-mail +Pathfinder -> Mailman : Send sign-in url with TOKEN +Pathfinder -> Client : OK with Check e-mail +else Invalid +Keeper -> Pathfinder : Not found +Pathfinder -> Client : OK with Check e-mail +end +end + +group Sign In (Second step) +Client -> Pathfinder : Visit sign-in url from e-mail +Pathfinder -> Mailman : Check TOKEN +alt Valid token +Mailman -> Pathfinder : Found +Pathfinder -> Sentinel : Generate JWT +Sentinel -> Pathfinder : JWT +Pathfinder -> Client : FOUND with JWT +else Invalid token +Mailman -> Pathfinder : Not found +Pathfinder -> Client : UNAUTHORIZED +end +end + +group Check session +Client -> Pathfinder : Validate JWT +Pathfinder -> Sentinel : Check JWT +alt Valid JWT +Sentinel -> Pathfinder : Valid +Pathfinder -> Client : FOUND +else Invalid JWT +Sentinel -> Pathfinder : Invalid +Pathfinder -> Client : UNAUTHORIZED +end +end + +@enduml diff --git a/assets/session.svg b/assets/session.svg new file mode 100644 index 0000000..db8dfc4 --- /dev/null +++ b/assets/session.svg @@ -0,0 +1 @@ +ClientClientPathfinderPathfinderKeeperKeeperMailmanMailmanSentinelSentinelRegisterE-Mail + Login formSave account infoalt[No errors]E-Mail addressSend sign-in url with TOKENOK with Check e-mail[Invalid data]FailedBAD_REQUEST with errorsSign In (First step)Send Login formLoad user profilealt[Valid]User e-mailSend sign-in url with TOKENOK with Check e-mail[Invalid]Not foundOK with Check e-mailSign In (Second step)Visit sign-in url from e-mailCheck TOKENalt[Valid token]FoundGenerate JWTJWTFOUND with JWT[Invalid token]Not foundUNAUTHORIZEDCheck sessionValidate JWTCheck JWTalt[Valid JWT]ValidFOUND[Invalid JWT]InvalidUNAUTHORIZED \ No newline at end of file diff --git a/assets/stream.puml b/assets/stream.puml index a691133..1dd6515 100644 --- a/assets/stream.puml +++ b/assets/stream.puml @@ -3,7 +3,6 @@ Client -> Pathfinder Pathfinder -> Sentinel : Check authorization -Sentinel -> LoggedState : Logged alt User Authorized Sentinel -> Pathfinder : Authorized Pathfinder -> Fileye : Open stream diff --git a/assets/stream.svg b/assets/stream.svg index 7a921ff..404dfbd 100644 --- a/assets/stream.svg +++ b/assets/stream.svg @@ -1 +1 @@ -ClientClientPathfinderPathfinderSentinelSentinelLoggedStateLoggedStateFileyeFileyeCheck authorizationLoggedalt[User Authorized]AuthorizedOpen streamResource access[Unauthenticated]UnauthenticatedUnauthenticated \ No newline at end of file +ClientClientPathfinderPathfinderSentinelSentinelFileyeFileyeCheck authorizationalt[User Authorized]AuthorizedOpen streamResource access[Unauthenticated]UnauthenticatedUnauthenticated \ No newline at end of file