2018-05-17 06:05:00 +02:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Copyright 2018 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/setting"
)
const (
tplSettingsApplications base . TplName = "user/settings/applications"
)
// Applications render manage access token page
func Applications ( ctx * context . Context ) {
ctx . Data [ "Title" ] = ctx . Tr ( "settings" )
ctx . Data [ "PageIsSettingsApplications" ] = true
2018-06-18 20:24:45 +02:00
loadApplicationsData ( ctx )
2018-05-17 06:05:00 +02:00
ctx . HTML ( 200 , tplSettingsApplications )
}
// ApplicationsPost response for add user's access token
func ApplicationsPost ( ctx * context . Context , form auth . NewAccessTokenForm ) {
ctx . Data [ "Title" ] = ctx . Tr ( "settings" )
ctx . Data [ "PageIsSettingsApplications" ] = true
if ctx . HasError ( ) {
2018-06-18 20:24:45 +02:00
loadApplicationsData ( ctx )
2018-05-17 06:05:00 +02:00
ctx . HTML ( 200 , tplSettingsApplications )
return
}
t := & models . AccessToken {
UID : ctx . User . ID ,
Name : form . Name ,
}
2020-04-13 21:02:48 +02:00
exist , err := models . AccessTokenByNameExists ( t )
if err != nil {
ctx . ServerError ( "AccessTokenByNameExists" , err )
return
}
if exist {
ctx . Flash . Error ( ctx . Tr ( "settings.generate_token_name_duplicate" , t . Name ) )
ctx . Redirect ( setting . AppSubURL + "/user/settings/applications" )
return
}
2018-05-17 06:05:00 +02:00
if err := models . NewAccessToken ( t ) ; err != nil {
ctx . ServerError ( "NewAccessToken" , err )
return
}
ctx . Flash . Success ( ctx . Tr ( "settings.generate_token_success" ) )
2019-05-04 11:45:34 -04:00
ctx . Flash . Info ( t . Token )
2018-05-17 06:05:00 +02:00
ctx . Redirect ( setting . AppSubURL + "/user/settings/applications" )
}
// DeleteApplication response for delete user access token
func DeleteApplication ( ctx * context . Context ) {
if err := models . DeleteAccessTokenByID ( ctx . QueryInt64 ( "id" ) , ctx . User . ID ) ; err != nil {
ctx . Flash . Error ( "DeleteAccessTokenByID: " + err . Error ( ) )
} else {
ctx . Flash . Success ( ctx . Tr ( "settings.delete_token_success" ) )
}
ctx . JSON ( 200 , map [ string ] interface { } {
"redirect" : setting . AppSubURL + "/user/settings/applications" ,
} )
}
2018-06-18 20:24:45 +02:00
func loadApplicationsData ( ctx * context . Context ) {
2020-08-28 10:09:33 +02:00
tokens , err := models . ListAccessTokens ( models . ListAccessTokensOptions { UserID : ctx . User . ID } )
2018-06-18 20:24:45 +02:00
if err != nil {
ctx . ServerError ( "ListAccessTokens" , err )
return
}
ctx . Data [ "Tokens" ] = tokens
2019-03-08 17:42:50 +01:00
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
}
2019-04-17 10:18:16 +02:00
ctx . Data [ "Grants" ] , err = models . GetOAuth2GrantsByUserID ( ctx . User . ID )
if err != nil {
ctx . ServerError ( "GetOAuth2GrantsByUserID" , err )
return
}
2019-03-08 17:42:50 +01:00
}
2018-06-18 20:24:45 +02:00
}