mirror of
https://github.com/thomiceli/opengist.git
synced 2024-12-23 04:52:40 +00:00
Separate OAuth unlink URL (#336)
This commit is contained in:
parent
9ac7a76f4a
commit
fa8217e27f
3 changed files with 29 additions and 26 deletions
|
@ -342,28 +342,6 @@ func oauth(ctx echo.Context) error {
|
||||||
goth.UseProviders(oidcProvider)
|
goth.UseProviders(oidcProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
currUser := getUserLogged(ctx)
|
|
||||||
if currUser != nil {
|
|
||||||
// Map each provider to a function that checks the relevant ID in currUser
|
|
||||||
providerIDCheckMap := map[string]func() bool{
|
|
||||||
GitHubProvider: func() bool { return currUser.GithubID != "" },
|
|
||||||
GitLabProvider: func() bool { return currUser.GitlabID != "" },
|
|
||||||
GiteaProvider: func() bool { return currUser.GiteaID != "" },
|
|
||||||
OpenIDConnect: func() bool { return currUser.OIDCID != "" },
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the provider is valid and if the user has a linked ID
|
|
||||||
// Means that the user wants to unlink the account
|
|
||||||
if checkFunc, exists := providerIDCheckMap[provider]; exists && checkFunc() {
|
|
||||||
if err := currUser.DeleteProviderID(provider); err != nil {
|
|
||||||
return errorRes(500, "Cannot unlink account from "+cases.Title(language.English).String(provider), err)
|
|
||||||
}
|
|
||||||
|
|
||||||
addFlash(ctx, tr(ctx, "flash.auth.account-unlinked-oauth", cases.Title(language.English).String(provider)), "success")
|
|
||||||
return redirect(ctx, "/settings")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ctxValue := context.WithValue(ctx.Request().Context(), gothic.ProviderParamKey, provider)
|
ctxValue := context.WithValue(ctx.Request().Context(), gothic.ProviderParamKey, provider)
|
||||||
ctx.SetRequest(ctx.Request().WithContext(ctxValue))
|
ctx.SetRequest(ctx.Request().WithContext(ctxValue))
|
||||||
if provider != GitHubProvider && provider != GitLabProvider && provider != GiteaProvider && provider != OpenIDConnect {
|
if provider != GitHubProvider && provider != GitLabProvider && provider != GiteaProvider && provider != OpenIDConnect {
|
||||||
|
@ -374,6 +352,30 @@ func oauth(ctx echo.Context) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func oauthUnlink(ctx echo.Context) error {
|
||||||
|
provider := ctx.Param("provider")
|
||||||
|
|
||||||
|
currUser := getUserLogged(ctx)
|
||||||
|
// Map each provider to a function that checks the relevant ID in currUser
|
||||||
|
providerIDCheckMap := map[string]func() bool{
|
||||||
|
GitHubProvider: func() bool { return currUser.GithubID != "" },
|
||||||
|
GitLabProvider: func() bool { return currUser.GitlabID != "" },
|
||||||
|
GiteaProvider: func() bool { return currUser.GiteaID != "" },
|
||||||
|
OpenIDConnect: func() bool { return currUser.OIDCID != "" },
|
||||||
|
}
|
||||||
|
|
||||||
|
if checkFunc, exists := providerIDCheckMap[provider]; exists && checkFunc() {
|
||||||
|
if err := currUser.DeleteProviderID(provider); err != nil {
|
||||||
|
return errorRes(500, "Cannot unlink account from "+cases.Title(language.English).String(provider), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
addFlash(ctx, tr(ctx, "flash.auth.account-unlinked-oauth", cases.Title(language.English).String(provider)), "success")
|
||||||
|
return redirect(ctx, "/settings")
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect(ctx, "/settings")
|
||||||
|
}
|
||||||
|
|
||||||
func logout(ctx echo.Context) error {
|
func logout(ctx echo.Context) error {
|
||||||
deleteSession(ctx)
|
deleteSession(ctx)
|
||||||
deleteCsrfCookie(ctx)
|
deleteCsrfCookie(ctx)
|
||||||
|
|
|
@ -260,6 +260,7 @@ func NewServer(isDev bool, sessionsPath string) *Server {
|
||||||
g1.GET("/logout", logout)
|
g1.GET("/logout", logout)
|
||||||
g1.GET("/oauth/:provider", oauth)
|
g1.GET("/oauth/:provider", oauth)
|
||||||
g1.GET("/oauth/:provider/callback", oauthCallback)
|
g1.GET("/oauth/:provider/callback", oauthCallback)
|
||||||
|
g1.GET("/oauth/:provider/unlink", oauthUnlink, logged)
|
||||||
|
|
||||||
g1.GET("/settings", userSettings, logged)
|
g1.GET("/settings", userSettings, logged)
|
||||||
g1.POST("/settings/email", emailProcess, logged)
|
g1.POST("/settings/email", emailProcess, logged)
|
||||||
|
|
8
templates/pages/settings.html
vendored
8
templates/pages/settings.html
vendored
|
@ -96,7 +96,7 @@
|
||||||
|
|
||||||
{{ if .githubOauth }}
|
{{ if .githubOauth }}
|
||||||
{{ if .userLogged.GithubID }}
|
{{ if .userLogged.GithubID }}
|
||||||
<a href="{{ $.c.ExternalUrl }}/oauth/github" class="block w-full mb-2 text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-100 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
<a href="{{ $.c.ExternalUrl }}/oauth/github/unlink" class="block w-full mb-2 text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-100 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
||||||
onclick="return confirm('Are you sure you want to unlink your GitHub account? You may lose access to Opengist if it\'s your only way to log in.')">
|
onclick="return confirm('Are you sure you want to unlink your GitHub account? You may lose access to Opengist if it\'s your only way to log in.')">
|
||||||
{{ .locale.Tr "settings.unlink-github-account" }}
|
{{ .locale.Tr "settings.unlink-github-account" }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
|
|
||||||
{{ if .gitlabOauth }}
|
{{ if .gitlabOauth }}
|
||||||
{{ if .userLogged.GitlabID }}
|
{{ if .userLogged.GitlabID }}
|
||||||
<a href="{{ $.c.ExternalUrl }}/oauth/gitlab" class="block w-full mb-2 text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-100 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
<a href="{{ $.c.ExternalUrl }}/oauth/gitlab/unlink" class="block w-full mb-2 text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-100 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
||||||
onclick="return confirm('Are you sure you want to unlink your GitLab account? You may lose access to Opengist if it\'s your only way to log in.')">
|
onclick="return confirm('Are you sure you want to unlink your GitLab account? You may lose access to Opengist if it\'s your only way to log in.')">
|
||||||
{{ .locale.Tr "settings.unlink-gitlab-account" }}
|
{{ .locale.Tr "settings.unlink-gitlab-account" }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
|
|
||||||
{{ if .giteaOauth }}
|
{{ if .giteaOauth }}
|
||||||
{{ if .userLogged.GiteaID }}
|
{{ if .userLogged.GiteaID }}
|
||||||
<a href="{{ $.c.ExternalUrl }}/oauth/gitea" class="block w-full text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-200 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
<a href="{{ $.c.ExternalUrl }}/oauth/gitea/unlink" class="block w-full text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-200 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
||||||
onclick="return confirm('Are you sure you want to unlink your Gitea account? You may lose access to Opengist if it\'s your only way to log in.')">
|
onclick="return confirm('Are you sure you want to unlink your Gitea account? You may lose access to Opengist if it\'s your only way to log in.')">
|
||||||
{{ .locale.Tr "settings.unlink-gitea-account" }}
|
{{ .locale.Tr "settings.unlink-gitea-account" }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if .oidcOauth }}
|
{{ if .oidcOauth }}
|
||||||
{{ if .userLogged.OIDCID }}
|
{{ if .userLogged.OIDCID }}
|
||||||
<a href="{{ $.c.ExternalUrl }}/oauth/openid-connect" class="block w-full text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-200 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
<a href="{{ $.c.ExternalUrl }}/oauth/openid-connect/unlink" class="block w-full text-center whitespace-nowrap text-slate-700 dark:text-slate-300{{ if .syncReposFromFS }} text-slate-500 cursor-not-allowed {{ end }}rounded border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 px-2.5 py-2 text-xs font-medium text-gray-700 dark:text-white shadow-sm hover:bg-gray-200 dark:hover:bg-gray-700 hover:border-gray-500 hover:text-slate-700 dark:hover:text-slate-300 focus:outline-none focus:ring-1 focus:border-primary-500 focus:ring-primary-500 leading-3"
|
||||||
onclick="return confirm('Are you sure you want to unlink your OpenID account? You may lose access to Opengist if it\'s your only way to log in.')">
|
onclick="return confirm('Are you sure you want to unlink your OpenID account? You may lose access to Opengist if it\'s your only way to log in.')">
|
||||||
Unlink OpenID account
|
Unlink OpenID account
|
||||||
</a>
|
</a>
|
||||||
|
|
Loading…
Reference in a new issue