autobrr/web
soup 43c28fc0c6
feat(auth): implement auth proxy support with OpenID Connect (#1853)
* feat(auth): implement oidc

* refactor(auth): centralize OIDC state cookie handling

* fix(web): resolve unused error variables in route handlers

* docs(readme): add OIDC authentication feature to list

* fix(auth): improve OIDC cookie handling for reverse proxy setups

The OIDC state cookie's Secure flag is now properly set when running behind a reverse proxy by checking both direct TLS and X-Forwarded-Proto header. This fixes authentication issues in common setups where:

- autobrr runs behind a reverse proxy that terminates HTTPS
- local development environments without TLS
- mixed protocol environments (internal HTTP, external HTTPS)

* fix: use crypt/random if argon2id fails

* feat(auth): show both login options when user exists in db

if user doesn't exist, e.g. canOnboard=true then we only show the OIDC button, since regular login makes no sense in that case

If user does not exist in db and the user wants to create a local user, OIDC needs to be disabled first

* feat(auth): improve OIDC provider initialization with discovery logging

* revert(issuer): do not remove trailing slash

* feat(auth): improve OIDC username resolution with additional claims

* fix(auth): handle OIDC issuer URLs with and without trailing slashes

When initializing the OIDC provider, automatically retry with/without trailing
slash if the first attempt fails.

- First attempts with original issuer URL
- If fails with trailing slash, retries without
- If fails without trailing slash, retries with

* feat(oidc): add gorilla sessions store for secure state management

Add gorilla sessions store to handle encrypted state cookies in OIDC flow,
while removing redundant session validation checks

Co-authored-by: Kyle Sanderson <kyle.leet@gmail.com>

* fix(auth): prevent duplicate OIDC state cookies for authenticated sessions

Modify OIDC config handler to check for existing authenticated sessions
before setting state cookie. Still returns OIDC enabled status to maintain
UI state, but prevents unnecessary cookie creation for authenticated users.

* feat(oidc): use random secret for temporary state cookies

Co-authored-by: Kyle Sanderson <kyle.leet@gmail.com>

* feat(auth): add rate limiting to OIDC endpoints

Co-authored-by: Kyle Sanderson <kyle.leet@gmail.com>

* fix(auth): validate OIDC authorization code presence in callback

Co-authored-by: Kyle Sanderson <kyle.leet@gmail.com>

* fix(auth): properly handle OIDC session errors

Improve error handling in OIDC login flow by properly handling cookie store
session errors. Return HTTP 500 if session cannot be retrieved instead of
silently continuing with potentially invalid state.

Co-authored-by: Kyle Sanderson <kyle.leet@gmail.com>

* feat(auth): track and display authentication method for oidc and password logins

* fix: tests

* docs(readme): add environment variable section

* go mod tidy

* chore: log style and errors

---------

Co-authored-by: Kyle Sanderson <kyle.leet@gmail.com>
Co-authored-by: ze0s <ze0s@riseup.net>
2024-12-19 14:41:31 +01:00
..
dist refactor(web): migrate create-react-app to vite (#823) 2023-04-10 14:28:24 +02:00
public fix(web): Inter font (#1133) 2023-09-22 18:37:56 +02:00
src feat(auth): implement auth proxy support with OpenID Connect (#1853) 2024-12-19 14:41:31 +01:00
.eslintrc.cjs build(web): bump vite and cjs node api refactor (#1276) 2023-12-15 23:36:16 +01:00
.gitignore refactor(web): migrate create-react-app to vite (#823) 2023-04-10 14:28:24 +02:00
.npmrc fix(web): disable pnpm strict version check (#1519) 2024-04-22 19:51:24 +02:00
build.go feat(http): implement proper BaseUrl support to coexist with legacy mode (#1298) 2024-12-19 12:56:04 +01:00
index.html feat(http): implement proper BaseUrl support to coexist with legacy mode (#1298) 2024-12-19 12:56:04 +01:00
package.json feat(auth): implement auth proxy support with OpenID Connect (#1853) 2024-12-19 14:41:31 +01:00
pnpm-lock.yaml feat(auth): implement auth proxy support with OpenID Connect (#1853) 2024-12-19 14:41:31 +01:00
postcss.config.cjs build(web): bump vite and cjs node api refactor (#1276) 2023-12-15 23:36:16 +01:00
README.md build(web): bump vite and cjs node api refactor (#1276) 2023-12-15 23:36:16 +01:00
tailwind.config.ts build(web): bump vite and cjs node api refactor (#1276) 2023-12-15 23:36:16 +01:00
tsconfig.json build(web): bump vite and cjs node api refactor (#1276) 2023-12-15 23:36:16 +01:00
tsconfig.node.json build(web): bump vite and cjs node api refactor (#1276) 2023-12-15 23:36:16 +01:00
vite.config.ts feat(http): implement proper BaseUrl support to coexist with legacy mode (#1298) 2024-12-19 12:56:04 +01:00

web

This project uses React built with Vite.

Available Scripts

In the project directory, you can run:

pnpm dev

Runs the app in the development mode.
Open http://localhost:3000 to view it in the browser.

The page will reload if you make edits.
You will also see any lint errors in the console.

pnpm run build

Builds the app for production to the dist folder.
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.
Your app is ready to be deployed!

Learn More

To learn React, check out the React documentation.