2014-08-14 10:12:21 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
2019-02-18 19:00:27 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2014-08-14 10:12:21 +04:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package org
import (
2015-09-18 00:21:27 +03:00
"strings"
2016-11-10 19:24:48 +03:00
"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"
2019-02-18 19:00:27 +03:00
"code.gitea.io/gitea/modules/structs"
2018-05-17 07:05:00 +03:00
userSetting "code.gitea.io/gitea/routers/user/setting"
2014-08-14 10:12:21 +04:00
)
const (
2016-11-18 06:03:03 +03:00
// tplSettingsOptions template path for render settings
tplSettingsOptions base . TplName = "org/settings/options"
// tplSettingsDelete template path for render delete repository
tplSettingsDelete base . TplName = "org/settings/delete"
// tplSettingsHooks template path for render hook settings
tplSettingsHooks base . TplName = "org/settings/hooks"
2014-08-14 10:12:21 +04:00
)
2016-11-18 06:03:03 +03:00
// Settings render the main settings page
2016-03-11 19:56:52 +03:00
func Settings ( ctx * context . Context ) {
2014-08-14 10:12:21 +04:00
ctx . Data [ "Title" ] = ctx . Tr ( "org.settings" )
ctx . Data [ "PageIsSettingsOptions" ] = true
2019-02-18 19:00:27 +03:00
ctx . Data [ "CurrentVisibility" ] = structs . VisibleType ( ctx . Org . Organization . Visibility )
2016-11-18 06:03:03 +03:00
ctx . HTML ( 200 , tplSettingsOptions )
2014-08-14 10:12:21 +04:00
}
2016-11-18 06:03:03 +03:00
// SettingsPost response for settings change submited
2016-03-11 19:56:52 +03:00
func SettingsPost ( ctx * context . Context , form auth . UpdateOrgSettingForm ) {
2014-08-14 10:12:21 +04:00
ctx . Data [ "Title" ] = ctx . Tr ( "org.settings" )
ctx . Data [ "PageIsSettingsOptions" ] = true
if ctx . HasError ( ) {
2016-11-18 06:03:03 +03:00
ctx . HTML ( 200 , tplSettingsOptions )
2014-08-14 10:12:21 +04:00
return
}
org := ctx . Org . Organization
// Check if organization name has been changed.
2015-09-18 00:21:27 +03:00
if org . LowerName != strings . ToLower ( form . Name ) {
2016-07-23 20:08:22 +03:00
isExist , err := models . IsUserExist ( org . ID , form . Name )
2014-08-14 10:12:21 +04:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "IsUserExist" , err )
2014-08-14 10:12:21 +04:00
return
} else if isExist {
2015-09-06 17:56:31 +03:00
ctx . Data [ "OrgName" ] = true
2016-11-18 06:03:03 +03:00
ctx . RenderWithErr ( ctx . Tr ( "form.username_been_taken" ) , tplSettingsOptions , & form )
2014-08-14 10:12:21 +04:00
return
2015-09-06 17:56:31 +03:00
} else if err = models . ChangeUserName ( org , form . Name ) ; err != nil {
2014-08-14 10:12:21 +04:00
if err == models . ErrUserNameIllegal {
2015-09-06 17:56:31 +03:00
ctx . Data [ "OrgName" ] = true
2016-11-18 06:03:03 +03:00
ctx . RenderWithErr ( ctx . Tr ( "form.illegal_username" ) , tplSettingsOptions , & form )
2014-08-14 10:12:21 +04:00
} else {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "ChangeUserName" , err )
2014-08-14 10:12:21 +04:00
}
return
}
2015-12-23 12:50:14 +03:00
// reset ctx.org.OrgLink with new name
2016-11-27 13:14:25 +03:00
ctx . Org . OrgLink = setting . AppSubURL + "/org/" + form . Name
2015-09-06 17:56:31 +03:00
log . Trace ( "Organization name changed: %s -> %s" , org . Name , form . Name )
2014-08-14 10:12:21 +04:00
}
2015-09-18 00:21:27 +03:00
// In case it's just a case change.
org . Name = form . Name
org . LowerName = strings . ToLower ( form . Name )
2014-08-14 10:12:21 +04:00
2015-12-12 03:24:57 +03:00
if ctx . User . IsAdmin {
org . MaxRepoCreation = form . MaxRepoCreation
}
2015-09-06 17:56:31 +03:00
org . FullName = form . FullName
2014-08-14 10:12:21 +04:00
org . Description = form . Description
org . Website = form . Website
org . Location = form . Location
2019-02-18 19:00:27 +03:00
org . Visibility = form . Visibility
2014-08-14 10:12:21 +04:00
if err := models . UpdateUser ( org ) ; err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "UpdateUser" , err )
2014-08-14 10:12:21 +04:00
return
}
log . Trace ( "Organization setting updated: %s" , org . Name )
ctx . Flash . Success ( ctx . Tr ( "org.settings.update_setting_success" ) )
2015-11-25 03:28:24 +03:00
ctx . Redirect ( ctx . Org . OrgLink + "/settings" )
2014-08-14 10:12:21 +04:00
}
2016-11-18 06:03:03 +03:00
// SettingsAvatar response for change avatar on settings page
2016-08-07 20:27:38 +03:00
func SettingsAvatar ( ctx * context . Context , form auth . AvatarForm ) {
2016-11-07 19:55:31 +03:00
form . Source = auth . AvatarLocal
2018-05-17 07:05:00 +03:00
if err := userSetting . UpdateAvatarSetting ( ctx , form , ctx . Org . Organization ) ; err != nil {
2015-09-07 00:12:02 +03:00
ctx . Flash . Error ( err . Error ( ) )
} else {
ctx . Flash . Success ( ctx . Tr ( "org.settings.update_avatar_success" ) )
}
2016-03-06 19:36:30 +03:00
ctx . Redirect ( ctx . Org . OrgLink + "/settings" )
}
2016-11-18 06:03:03 +03:00
// SettingsDeleteAvatar response for delete avatar on setings page
2016-03-11 19:56:52 +03:00
func SettingsDeleteAvatar ( ctx * context . Context ) {
2016-03-06 19:36:30 +03:00
if err := ctx . Org . Organization . DeleteAvatar ( ) ; err != nil {
ctx . Flash . Error ( err . Error ( ) )
}
2015-09-07 00:12:02 +03:00
ctx . Redirect ( ctx . Org . OrgLink + "/settings" )
}
2016-11-18 06:03:03 +03:00
// SettingsDelete response for delete repository
2016-03-11 19:56:52 +03:00
func SettingsDelete ( ctx * context . Context ) {
2014-08-14 10:12:21 +04:00
ctx . Data [ "Title" ] = ctx . Tr ( "org.settings" )
ctx . Data [ "PageIsSettingsDelete" ] = true
org := ctx . Org . Organization
if ctx . Req . Method == "POST" {
2015-09-06 18:25:08 +03:00
if _ , err := models . UserSignIn ( ctx . User . Name , ctx . Query ( "password" ) ) ; err != nil {
if models . IsErrUserNotExist ( err ) {
2016-11-18 06:03:03 +03:00
ctx . RenderWithErr ( ctx . Tr ( "form.enterred_invalid_password" ) , tplSettingsDelete , nil )
2015-09-06 18:25:08 +03:00
} else {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "UserSignIn" , err )
2015-09-06 18:25:08 +03:00
}
return
}
2014-08-14 10:12:21 +04:00
if err := models . DeleteOrganization ( org ) ; err != nil {
2015-03-18 04:51:39 +03:00
if models . IsErrUserOwnRepos ( err ) {
2014-08-14 10:12:21 +04:00
ctx . Flash . Error ( ctx . Tr ( "form.org_still_own_repo" ) )
2015-11-25 03:28:24 +03:00
ctx . Redirect ( ctx . Org . OrgLink + "/settings/delete" )
2015-03-18 04:51:39 +03:00
} else {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "DeleteOrganization" , err )
2014-08-14 10:12:21 +04:00
}
} else {
2014-10-07 03:12:52 +04:00
log . Trace ( "Organization deleted: %s" , org . Name )
2016-11-27 13:14:25 +03:00
ctx . Redirect ( setting . AppSubURL + "/" )
2014-08-14 10:12:21 +04:00
}
return
}
2016-11-18 06:03:03 +03:00
ctx . HTML ( 200 , tplSettingsDelete )
2014-08-14 10:12:21 +04:00
}
2014-09-04 15:17:00 +04:00
2016-11-18 06:03:03 +03:00
// Webhooks render webhook list page
2016-03-11 19:56:52 +03:00
func Webhooks ( ctx * context . Context ) {
2014-09-04 15:17:00 +04:00
ctx . Data [ "Title" ] = ctx . Tr ( "org.settings" )
ctx . Data [ "PageIsSettingsHooks" ] = true
2019-03-19 05:33:20 +03:00
ctx . Data [ "BaseLink" ] = ctx . Org . OrgLink + "/settings/hooks"
2015-08-26 16:45:51 +03:00
ctx . Data [ "Description" ] = ctx . Tr ( "org.settings.hooks_desc" )
2014-09-04 15:17:00 +04:00
2016-07-23 20:08:22 +03:00
ws , err := models . GetWebhooksByOrgID ( ctx . Org . Organization . ID )
2014-09-04 15:17:00 +04:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "GetWebhooksByOrgId" , err )
2014-09-04 15:17:00 +04:00
return
}
ctx . Data [ "Webhooks" ] = ws
2016-11-18 06:03:03 +03:00
ctx . HTML ( 200 , tplSettingsHooks )
2014-09-04 15:17:00 +04:00
}
2015-08-26 16:45:51 +03:00
2016-11-18 06:03:03 +03:00
// DeleteWebhook response for delete webhook
2016-03-11 19:56:52 +03:00
func DeleteWebhook ( ctx * context . Context ) {
2016-07-23 20:08:22 +03:00
if err := models . DeleteWebhookByOrgID ( ctx . Org . Organization . ID , ctx . QueryInt64 ( "id" ) ) ; err != nil {
2016-07-17 03:33:59 +03:00
ctx . Flash . Error ( "DeleteWebhookByOrgID: " + err . Error ( ) )
2015-08-26 16:45:51 +03:00
} else {
ctx . Flash . Success ( ctx . Tr ( "repo.settings.webhook_deletion_success" ) )
}
ctx . JSON ( 200 , map [ string ] interface { } {
"redirect" : ctx . Org . OrgLink + "/settings/hooks" ,
} )
}