diff --git a/support/readme.md b/support/readme.md index 9d4b083..7ddecc4 100644 --- a/support/readme.md +++ b/support/readme.md @@ -40,34 +40,65 @@ a docker-compose example image is also provided. running docker compose should b ## multi-account setup -authentication / user routing has been left out of the design of gossa, as simple tools are already available for this purpose. [caddy](https://caddyserver.com/v1/) is used here as an example, but other proxy can be used in a similar fashion. +authentication / user routing has been left out of the design of gossa, as simple tools are already available for this purpose. [caddy](https://caddyserver.com) is used here as an example, but other proxy can be used in a similar fashion. ### example 1 root, multiple read-only users this sample caddy config will - + enable https on the domain myserver.com + + enable https on the domain myserver.com (http will be automatically redirected to https) + password protect the access + route the root user requests to 1 gossa instance + route user1 and user2 requests to a readonly gossa instance +
+ legacy caddy v1 config snippet + + ```sh + myserver.com + + # proxy regular and read only instance + proxy / 127.0.0.1:8001 + proxy /ro 127.0.0.1:8002 { without /ro } + + # reroute non-root user to read-only + # cm9... is the output of `printf "root:password" | base64` + rewrite { + if {>Authorization} not "Basic cm9vdDpwYXNzd29yZA==" + to /ro/{path} + } + + # gate access + basicauth / root password + basicauth / ro_user1 passworduser1 + basicauth / ro_user2 passworduser2 + ``` +
+ +Caddy v2 Caddyfile + ```sh myserver.com -# proxy regular and read only instance -proxy / 127.0.0.1:8001 -proxy /ro 127.0.0.1:8002 { without /ro } - -# reroute non-root user to read-only -# cm9... is the output of `printf "root:password" | base64` -rewrite { - if {>Authorization} not "Basic cm9vdDpwYXNzd29yZA==" - to /ro/{path} +# gate access +basicauth { + root $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG # password is "hiccup" + ro_user1 $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG # password is "hiccup" + ro_user2 $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG # password is "hiccup" } -# gate access -basicauth / root password -basicauth / ro_user1 passworduser1 -basicauth / ro_user2 passworduser2 +# named matcher for root user +@isroot { + vars {http.auth.user.id} root +} + +# proxy regular and read only instance +handle @isroot { + reverse_proxy 127.0.0.1:8001 +} +# route non-root user to read only instance +handle { + reverse_proxy 127.0.0.1:8002 +} ``` then simply start the 2 gossa instances, and caddy @@ -85,30 +116,59 @@ then simply start the 2 gossa instances, and caddy ### example 2 users on 2 different folders -this sample caddy config will - + enable https on the domain myserver.com +this sample caddy v2 config will + + enable https on the domain myserver.com (http will be automatically redirected to https) + password protect the access + route user1 to own folder + route user2 to own folder + share a folder between 2 users with a symlink +
+ Legacy Caddy v1 Caddyfile + + ```sh + myserver.com + + proxy /user1 127.0.0.1:8001 { without /user1 } + proxy /user2 127.0.0.1:8002 { without /user2 } + + basicauth / user1 passworduser1 + basicauth / user2 passworduser2 + + rewrite { + if {>Authorization} is "Basic dXNlcjE6cGFzc3dvcmR1c2VyMQ==" + to /user1/{path} + } + + rewrite { + if {>Authorization} is "Basic dXNlcjI6cGFzc3dvcmR1c2VyMg==" + to /user2/{path} + } + ``` +
+ +Caddy v2 Caddyfile + ```sh myserver.com -proxy /user1 127.0.0.1:8001 { without /user1 } -proxy /user2 127.0.0.1:8002 { without /user2 } - -basicauth / user1 passworduser1 -basicauth / user2 passworduser2 - -rewrite { - if {>Authorization} is "Basic dXNlcjE6cGFzc3dvcmR1c2VyMQ==" - to /user1/{path} +basicauth { + user1 $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG # password is "hiccup" + user2 $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG # password is "hiccup" } -rewrite { - if {>Authorization} is "Basic dXNlcjI6cGFzc3dvcmR1c2VyMg==" - to /user2/{path} +@user1auth { + vars {http.auth.user.id} user1 +} +handle @user1auth { + reverse_proxy 127.0.0.1:8001 +} + +@user2auth { + vars {http.auth.user.id} user2 +} +handle @user2auth { + reverse_proxy 127.0.0.1:8002 } ```