mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2025-10-29 05:05:42 +00:00
Compare commits
29 Commits
feat/untru
...
feat/new-u
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97b0d3e350 | ||
|
|
e8190456c3 | ||
|
|
02f83baa4d | ||
|
|
d59f35467e | ||
|
|
00fbbfc4f2 | ||
|
|
76346fe835 | ||
|
|
03f193090d | ||
|
|
3612ac0740 | ||
|
|
00203722f8 | ||
|
|
60093997dc | ||
|
|
ada21776bc | ||
|
|
b12d0655d4 | ||
|
|
2246ca0c13 | ||
|
|
10dc228f6c | ||
|
|
28eea8d40c | ||
|
|
a4224e6771 | ||
|
|
003f55b9ff | ||
|
|
dbc460144e | ||
|
|
f05181b05d | ||
|
|
28ef893456 | ||
|
|
a488b70bbe | ||
|
|
4e91e567b2 | ||
|
|
6453edede6 | ||
|
|
41c63e5b49 | ||
|
|
31a7b0ff06 | ||
|
|
0880152b48 | ||
|
|
51532350cc | ||
|
|
56ae246ff4 | ||
|
|
fd96f39d3a |
@@ -30,4 +30,3 @@ APP_TITLE=Tinyauth SSO
|
||||
FORGOT_PASSWORD_MESSAGE=Some message about resetting the password
|
||||
OAUTH_AUTO_REDIRECT=none
|
||||
BACKGROUND_IMAGE=some_image_url
|
||||
GENERIC_SKIP_SSL=false
|
||||
@@ -52,4 +52,7 @@ COPY --from=builder /tinyauth/tinyauth ./
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
HEALTHCHECK --interval=10s --timeout=5s \
|
||||
CMD curl -f http://localhost:3000/api/healthcheck || exit 1
|
||||
|
||||
ENTRYPOINT ["./tinyauth"]
|
||||
12
README.md
12
README.md
@@ -24,22 +24,18 @@ Tinyauth is a simple authentication middleware that adds simple username/passwor
|
||||
> [!NOTE]
|
||||
> Tinyauth is intended for homelab use only and it is not made for production use cases. If you are looking for something production ready please use [authentik](https://goauthentik.io) instead.
|
||||
|
||||
## Discord
|
||||
|
||||
I just made a Discord server for tinyauth! It is not only for tinyauth but general self-hosting and homelabbing. [See you there!](https://discord.gg/eHzVaCzRRd).
|
||||
|
||||
## Getting Started
|
||||
|
||||
You can easily get started with tinyauth by following the guide in the [documentation](https://tinyauth.app/docs/getting-started.html). There is also an available [docker compose file](./docker-compose.example.yml) that has traefik, whoami and tinyauth to demonstrate its capabilities.
|
||||
|
||||
## Demo
|
||||
|
||||
If you are still not sure if tinyauth suits your needs you can try out the [demo](https://demo.tinyauth.app). The default username is `user` and the default password is `password`.
|
||||
|
||||
## Documentation
|
||||
|
||||
You can find documentation and guides on all of the available configuration of tinyauth in the [website](https://tinyauth.app).
|
||||
|
||||
## Discord
|
||||
|
||||
I just made a Discord server for tinyauth! It is not only for tinyauth but general self-hosting and homelabbing. [See you there!](https://discord.gg/eHzVaCzRRd).
|
||||
|
||||
## Contributing
|
||||
|
||||
All contributions to the codebase are welcome! If you have any recommendations on how to improve security or find a security issue in tinyauth please open an issue or pull request so it can be fixed as soon as possible!
|
||||
|
||||
@@ -79,7 +79,6 @@ var rootCmd = &cobra.Command{
|
||||
GenericAuthURL: config.GenericAuthURL,
|
||||
GenericTokenURL: config.GenericTokenURL,
|
||||
GenericUserURL: config.GenericUserURL,
|
||||
GenericSkipSSL: config.GenericSkipSSL,
|
||||
AppURL: config.AppURL,
|
||||
}
|
||||
|
||||
@@ -198,7 +197,6 @@ func init() {
|
||||
rootCmd.Flags().String("generic-token-url", "", "Generic OAuth token URL.")
|
||||
rootCmd.Flags().String("generic-user-url", "", "Generic OAuth user info URL.")
|
||||
rootCmd.Flags().String("generic-name", "Generic", "Generic OAuth provider name.")
|
||||
rootCmd.Flags().Bool("generic-skip-ssl", false, "Skip SSL verification for the generic OAuth provider.")
|
||||
rootCmd.Flags().Bool("disable-continue", false, "Disable continue screen and redirect to app directly.")
|
||||
rootCmd.Flags().String("oauth-whitelist", "", "Comma separated list of email addresses to whitelist when using OAuth.")
|
||||
rootCmd.Flags().String("oauth-auto-redirect", "none", "Auto redirect to the specified OAuth provider if configured. (available providers: github, google, generic)")
|
||||
@@ -233,7 +231,6 @@ func init() {
|
||||
viper.BindEnv("generic-token-url", "GENERIC_TOKEN_URL")
|
||||
viper.BindEnv("generic-user-url", "GENERIC_USER_URL")
|
||||
viper.BindEnv("generic-name", "GENERIC_NAME")
|
||||
viper.BindEnv("generic-skip-ssl", "GENERIC_SKIP_SSL")
|
||||
viper.BindEnv("disable-continue", "DISABLE_CONTINUE")
|
||||
viper.BindEnv("oauth-whitelist", "OAUTH_WHITELIST")
|
||||
viper.BindEnv("oauth-auto-redirect", "OAUTH_AUTO_REDIRECT")
|
||||
|
||||
@@ -29,7 +29,7 @@ export const LoginPage = () => {
|
||||
return <Navigate to="/logout" />;
|
||||
}
|
||||
|
||||
const { configuredProviders, title, oauthAutoRedirect, genericName } = useAppContext();
|
||||
const { configuredProviders, title, oauthAutoRedirect } = useAppContext();
|
||||
const { search } = useLocation();
|
||||
const { t } = useTranslation();
|
||||
const isMounted = useIsMounted();
|
||||
@@ -138,7 +138,7 @@ export const LoginPage = () => {
|
||||
)}
|
||||
{configuredProviders.includes("generic") && (
|
||||
<OAuthButton
|
||||
title={genericName}
|
||||
title="Generic"
|
||||
icon={<GenericIcon />}
|
||||
className="w-full"
|
||||
onClick={() => oauthMutation.mutate("generic")}
|
||||
|
||||
@@ -3,48 +3,28 @@ package oauth
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"crypto/tls"
|
||||
"encoding/base64"
|
||||
"net/http"
|
||||
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
func NewOAuth(config oauth2.Config, insecureSkipVerify bool) *OAuth {
|
||||
func NewOAuth(config oauth2.Config) *OAuth {
|
||||
return &OAuth{
|
||||
Config: config,
|
||||
InsecureSkipVerify: insecureSkipVerify,
|
||||
Config: config,
|
||||
}
|
||||
}
|
||||
|
||||
type OAuth struct {
|
||||
Config oauth2.Config
|
||||
Context context.Context
|
||||
Token *oauth2.Token
|
||||
Verifier string
|
||||
InsecureSkipVerify bool
|
||||
Config oauth2.Config
|
||||
Context context.Context
|
||||
Token *oauth2.Token
|
||||
Verifier string
|
||||
}
|
||||
|
||||
func (oauth *OAuth) Init() {
|
||||
// Create transport with TLS
|
||||
transport := &http.Transport{
|
||||
TLSClientConfig: &tls.Config{
|
||||
InsecureSkipVerify: oauth.InsecureSkipVerify,
|
||||
MinVersion: tls.VersionTLS12,
|
||||
},
|
||||
}
|
||||
|
||||
// Create a new context
|
||||
// Create a new context and verifier
|
||||
oauth.Context = context.Background()
|
||||
|
||||
// Create the HTTP client with the transport
|
||||
httpClient := &http.Client{
|
||||
Transport: transport,
|
||||
}
|
||||
|
||||
// Set the HTTP client in the context
|
||||
oauth.Context = context.WithValue(oauth.Context, oauth2.HTTPClient, httpClient)
|
||||
// Create the verifier
|
||||
oauth.Verifier = oauth2.GenerateVerifier()
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ func (providers *Providers) Init() {
|
||||
RedirectURL: fmt.Sprintf("%s/api/oauth/callback/github", providers.Config.AppURL),
|
||||
Scopes: GithubScopes(),
|
||||
Endpoint: endpoints.GitHub,
|
||||
}, false)
|
||||
})
|
||||
|
||||
// Initialize the oauth provider
|
||||
providers.Github.Init()
|
||||
@@ -53,7 +53,7 @@ func (providers *Providers) Init() {
|
||||
RedirectURL: fmt.Sprintf("%s/api/oauth/callback/google", providers.Config.AppURL),
|
||||
Scopes: GoogleScopes(),
|
||||
Endpoint: endpoints.Google,
|
||||
}, false)
|
||||
})
|
||||
|
||||
// Initialize the oauth provider
|
||||
providers.Google.Init()
|
||||
@@ -73,7 +73,7 @@ func (providers *Providers) Init() {
|
||||
AuthURL: providers.Config.GenericAuthURL,
|
||||
TokenURL: providers.Config.GenericTokenURL,
|
||||
},
|
||||
}, providers.Config.GenericSkipSSL)
|
||||
})
|
||||
|
||||
// Initialize the oauth provider
|
||||
providers.Generic.Init()
|
||||
|
||||
@@ -24,7 +24,6 @@ type Config struct {
|
||||
GenericTokenURL string `mapstructure:"generic-token-url"`
|
||||
GenericUserURL string `mapstructure:"generic-user-url"`
|
||||
GenericName string `mapstructure:"generic-name"`
|
||||
GenericSkipSSL bool `mapstructure:"generic-skip-ssl"`
|
||||
DisableContinue bool `mapstructure:"disable-continue"`
|
||||
OAuthWhitelist string `mapstructure:"oauth-whitelist"`
|
||||
OAuthAutoRedirect string `mapstructure:"oauth-auto-redirect" validate:"oneof=none github google generic"`
|
||||
@@ -35,7 +34,7 @@ type Config struct {
|
||||
LoginTimeout int `mapstructure:"login-timeout"`
|
||||
LoginMaxRetries int `mapstructure:"login-max-retries"`
|
||||
FogotPasswordMessage string `mapstructure:"forgot-password-message" validate:"required"`
|
||||
BackgroundImage string `mapstructure:"background-image" validate:"required"`
|
||||
BackgroundImage string `mapstructure:"background-image" validate:"required,url"`
|
||||
}
|
||||
|
||||
// Server configuration
|
||||
@@ -63,7 +62,6 @@ type OAuthConfig struct {
|
||||
GenericAuthURL string
|
||||
GenericTokenURL string
|
||||
GenericUserURL string
|
||||
GenericSkipSSL bool
|
||||
AppURL string
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user