diff options
author | Jonas Franz <info@jonasfranz.software> | 2019-03-08 17:42:50 +0100 |
---|---|---|
committer | techknowlogick <matti@mdranta.net> | 2019-03-08 11:42:50 -0500 |
commit | e777c6bdc6f12f9152335f8bfd66b956aedc9957 (patch) | |
tree | b79c9bc2d4f9402dcd15d993b088840e2fad8a54 /routers/user/setting | |
parent | 9d3732dfd512273992855097bba1e909f098db23 (diff) | |
download | gitea-e777c6bdc6f12f9152335f8bfd66b956aedc9957.tar.gz gitea-e777c6bdc6f12f9152335f8bfd66b956aedc9957.zip |
Integrate OAuth2 Provider (#5378)
Diffstat (limited to 'routers/user/setting')
-rw-r--r-- | routers/user/setting/applications.go | 8 | ||||
-rw-r--r-- | routers/user/setting/oauth2.go | 112 |
2 files changed, 120 insertions, 0 deletions
diff --git a/routers/user/setting/applications.go b/routers/user/setting/applications.go index ac7252469a..bc8633f72d 100644 --- a/routers/user/setting/applications.go +++ b/routers/user/setting/applications.go @@ -74,4 +74,12 @@ func loadApplicationsData(ctx *context.Context) { return } ctx.Data["Tokens"] = tokens + ctx.Data["EnableOAuth2"] = setting.OAuth2.Enable + if setting.OAuth2.Enable { + ctx.Data["Applications"], err = models.GetOAuth2ApplicationsByUserID(ctx.User.ID) + if err != nil { + ctx.ServerError("GetOAuth2ApplicationsByUserID", err) + return + } + } } diff --git a/routers/user/setting/oauth2.go b/routers/user/setting/oauth2.go new file mode 100644 index 0000000000..7ae8e7b7f6 --- /dev/null +++ b/routers/user/setting/oauth2.go @@ -0,0 +1,112 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package setting + +import ( + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/auth" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" +) + +const ( + tplSettingsOAuthApplications base.TplName = "user/settings/applications_oauth2_edit" +) + +// OAuthApplicationsPost response for adding a oauth2 application +func OAuthApplicationsPost(ctx *context.Context, form auth.EditOAuth2ApplicationForm) { + ctx.Data["Title"] = ctx.Tr("settings") + ctx.Data["PageIsSettingsApplications"] = true + + if ctx.HasError() { + loadApplicationsData(ctx) + + ctx.HTML(200, tplSettingsApplications) + return + } + // TODO validate redirect URI + app, err := models.CreateOAuth2Application(models.CreateOAuth2ApplicationOptions{ + Name: form.Name, + RedirectURIs: []string{form.RedirectURI}, + UserID: ctx.User.ID, + }) + if err != nil { + ctx.ServerError("CreateOAuth2Application", err) + return + } + ctx.Flash.Success(ctx.Tr("settings.create_oauth2_application_success")) + ctx.Data["App"] = app + ctx.Data["ClientSecret"], err = app.GenerateClientSecret() + if err != nil { + ctx.ServerError("GenerateClientSecret", err) + return + } + ctx.HTML(200, tplSettingsOAuthApplications) +} + +// OAuthApplicationsEdit response for editing oauth2 application +func OAuthApplicationsEdit(ctx *context.Context, form auth.EditOAuth2ApplicationForm) { + ctx.Data["Title"] = ctx.Tr("settings") + ctx.Data["PageIsSettingsApplications"] = true + + if ctx.HasError() { + loadApplicationsData(ctx) + + ctx.HTML(200, tplSettingsApplications) + return + } + // TODO validate redirect URI + if err := models.UpdateOAuth2Application(models.UpdateOAuth2ApplicationOptions{ + ID: ctx.ParamsInt64("id"), + Name: form.Name, + RedirectURIs: []string{form.RedirectURI}, + UserID: ctx.User.ID, + }); err != nil { + ctx.ServerError("UpdateOAuth2Application", err) + return + } + var err error + if ctx.Data["App"], err = models.GetOAuth2ApplicationByID(ctx.ParamsInt64("id")); err != nil { + ctx.ServerError("GetOAuth2ApplicationByID", err) + return + } + ctx.Flash.Success(ctx.Tr("settings.update_oauth2_application_success")) + ctx.HTML(200, tplSettingsOAuthApplications) +} + +// OAuth2ApplicationShow displays the given application +func OAuth2ApplicationShow(ctx *context.Context) { + app, err := models.GetOAuth2ApplicationByID(ctx.ParamsInt64("id")) + if err != nil { + if models.IsErrOAuthApplicationNotFound(err) { + ctx.NotFound("Application not found", err) + return + } + ctx.ServerError("GetOAuth2ApplicationByID", err) + return + } + if app.UID != ctx.User.ID { + ctx.NotFound("Application not found", nil) + return + } + ctx.Data["App"] = app + ctx.HTML(200, tplSettingsOAuthApplications) +} + +// DeleteOAuth2Application deletes the given oauth2 application +func DeleteOAuth2Application(ctx *context.Context) { + if err := models.DeleteOAuth2Application(ctx.QueryInt64("id"), ctx.User.ID); err != nil { + ctx.ServerError("DeleteOAuth2Application", err) + return + } + log.Trace("OAuth2 Application deleted: %s", ctx.User.Name) + + ctx.Flash.Success(ctx.Tr("settings.remove_oauth2_application_success")) + ctx.JSON(200, map[string]interface{}{ + "redirect": setting.AppSubURL + "/user/settings/applications", + }) +} |