2014-03-10 16:54:52 +08:00
// Copyright 2014 The Gogs 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 user
import (
2014-03-10 20:48:58 -04:00
"strconv"
2014-03-10 16:54:52 +08:00
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
2014-03-15 09:17:16 -04:00
"github.com/gogits/gogs/modules/middleware"
2014-03-10 16:54:52 +08:00
)
2014-03-18 18:31:54 -04:00
// Render user setting page (email, website modify)
2014-03-15 22:34:33 +08:00
func Setting ( ctx * middleware . Context , form auth . UpdateProfileForm ) {
ctx . Data [ "Title" ] = "Setting"
2014-03-18 18:31:54 -04:00
ctx . Data [ "PageIsUserSetting" ] = true // For navbar arrow.
ctx . Data [ "IsUserPageSetting" ] = true // For setting nav highlight.
2014-03-13 03:39:18 -04:00
2014-03-15 22:34:33 +08:00
user := ctx . User
ctx . Data [ "Owner" ] = user
2014-03-14 01:12:07 -04:00
2014-03-15 22:34:33 +08:00
if ctx . Req . Method == "GET" {
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/setting" )
2014-03-13 03:44:56 -04:00
return
2014-03-13 03:39:18 -04:00
}
2014-03-18 21:58:58 +08:00
// below is for POST requests
2014-03-15 22:34:33 +08:00
if hasErr , ok := ctx . Data [ "HasError" ] ; ok && hasErr . ( bool ) {
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/setting" )
2014-03-13 03:39:18 -04:00
return
}
user . Email = form . Email
user . Website = form . Website
user . Location = form . Location
user . Avatar = base . EncodeMd5 ( form . Avatar )
2014-03-14 01:12:07 -04:00
user . AvatarEmail = form . Avatar
2014-03-13 03:39:18 -04:00
if err := models . UpdateUser ( user ) ; err != nil {
2014-03-15 09:17:16 -04:00
ctx . Handle ( 200 , "setting.Setting" , err )
2014-03-13 03:39:18 -04:00
return
}
2014-03-15 22:34:33 +08:00
ctx . Data [ "IsSuccess" ] = true
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/setting" )
2014-03-21 06:15:58 -04:00
2014-03-19 04:48:45 -04:00
log . Trace ( "%s User setting updated: %s" , ctx . Req . RequestURI , ctx . User . LowerName )
2014-03-10 16:54:52 +08:00
}
2014-03-15 22:34:33 +08:00
func SettingPassword ( ctx * middleware . Context , form auth . UpdatePasswdForm ) {
ctx . Data [ "Title" ] = "Password"
ctx . Data [ "PageIsUserSetting" ] = true
2014-03-18 18:31:54 -04:00
ctx . Data [ "IsUserPageSettingPasswd" ] = true
2014-03-14 11:24:08 +08:00
2014-03-15 22:34:33 +08:00
if ctx . Req . Method == "GET" {
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/password" )
2014-03-14 01:12:07 -04:00
return
}
2014-03-13 04:06:35 -04:00
2014-03-15 22:34:33 +08:00
user := ctx . User
2014-03-14 01:12:07 -04:00
newUser := & models . User { Passwd : form . NewPasswd }
2014-03-13 04:06:35 -04:00
if err := newUser . EncodePasswd ( ) ; err != nil {
2014-03-15 09:17:16 -04:00
ctx . Handle ( 200 , "setting.SettingPassword" , err )
2014-03-13 04:06:35 -04:00
return
}
if user . Passwd != newUser . Passwd {
2014-03-15 22:34:33 +08:00
ctx . Data [ "HasError" ] = true
ctx . Data [ "ErrorMsg" ] = "Old password is not correct"
2014-03-13 04:06:35 -04:00
} else if form . NewPasswd != form . RetypePasswd {
2014-03-15 22:34:33 +08:00
ctx . Data [ "HasError" ] = true
ctx . Data [ "ErrorMsg" ] = "New password and re-type password are not same"
2014-03-13 04:06:35 -04:00
} else {
user . Passwd = newUser . Passwd
if err := models . UpdateUser ( user ) ; err != nil {
2014-03-15 09:17:16 -04:00
ctx . Handle ( 200 , "setting.SettingPassword" , err )
2014-03-13 04:06:35 -04:00
return
}
2014-03-15 22:34:33 +08:00
ctx . Data [ "IsSuccess" ] = true
2014-03-13 04:06:35 -04:00
}
2014-03-15 22:34:33 +08:00
ctx . Data [ "Owner" ] = user
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/password" )
2014-03-19 04:48:45 -04:00
log . Trace ( "%s User password updated: %s" , ctx . Req . RequestURI , ctx . User . LowerName )
2014-03-13 04:06:35 -04:00
}
2014-03-15 22:34:33 +08:00
func SettingSSHKeys ( ctx * middleware . Context , form auth . AddSSHKeyForm ) {
ctx . Data [ "Title" ] = "SSH Keys"
2014-03-10 20:48:58 -04:00
// Delete SSH key.
2014-03-15 22:34:33 +08:00
if ctx . Req . Method == "DELETE" || ctx . Query ( "_method" ) == "DELETE" {
id , err := strconv . ParseInt ( ctx . Query ( "id" ) , 10 , 64 )
2014-03-10 21:12:49 +08:00
if err != nil {
log . Error ( "ssh.DelPublicKey: %v" , err )
2014-03-19 21:57:55 +08:00
ctx . JSON ( 200 , map [ string ] interface { } {
2014-03-10 21:12:49 +08:00
"ok" : false ,
"err" : err . Error ( ) ,
} )
return
}
k := & models . PublicKey {
Id : id ,
2014-03-15 22:34:33 +08:00
OwnerId : ctx . User . Id ,
2014-03-10 21:12:49 +08:00
}
2014-03-10 20:48:58 -04:00
if err = models . DeletePublicKey ( k ) ; err != nil {
2014-03-10 21:12:49 +08:00
log . Error ( "ssh.DelPublicKey: %v" , err )
2014-03-19 21:57:55 +08:00
ctx . JSON ( 200 , map [ string ] interface { } {
2014-03-10 21:12:49 +08:00
"ok" : false ,
"err" : err . Error ( ) ,
} )
} else {
2014-03-19 04:48:45 -04:00
log . Trace ( "%s User SSH key deleted: %s" , ctx . Req . RequestURI , ctx . User . LowerName )
2014-03-19 21:57:55 +08:00
ctx . JSON ( 200 , map [ string ] interface { } {
2014-03-10 21:12:49 +08:00
"ok" : true ,
} )
}
2014-03-11 11:41:38 +08:00
return
2014-03-10 21:12:49 +08:00
}
2014-03-10 20:48:58 -04:00
// Add new SSH key.
2014-03-15 22:34:33 +08:00
if ctx . Req . Method == "POST" {
if hasErr , ok := ctx . Data [ "HasError" ] ; ok && hasErr . ( bool ) {
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/publickey" )
2014-03-10 20:48:58 -04:00
return
}
2014-03-15 22:34:33 +08:00
k := & models . PublicKey { OwnerId : ctx . User . Id ,
2014-03-10 20:48:58 -04:00
Name : form . KeyName ,
Content : form . KeyContent ,
2014-03-10 16:54:52 +08:00
}
2014-03-10 20:48:58 -04:00
if err := models . AddPublicKey ( k ) ; err != nil {
2014-03-16 06:25:16 -04:00
if err . Error ( ) == models . ErrKeyAlreadyExist . Error ( ) {
ctx . RenderWithErr ( "Public key name has been used" , "user/publickey" , & form )
return
}
2014-03-15 10:52:14 -04:00
ctx . Handle ( 200 , "ssh.AddPublicKey" , err )
2014-03-19 04:48:45 -04:00
log . Trace ( "%s User SSH key added: %s" , ctx . Req . RequestURI , ctx . User . LowerName )
2014-03-10 16:54:52 +08:00
return
} else {
2014-03-15 22:34:33 +08:00
ctx . Data [ "AddSSHKeySuccess" ] = true
2014-03-10 16:54:52 +08:00
}
}
2014-03-10 20:48:58 -04:00
// List existed SSH keys.
2014-03-15 22:34:33 +08:00
keys , err := models . ListPublicKey ( ctx . User . Id )
2014-03-10 16:54:52 +08:00
if err != nil {
2014-03-15 10:52:14 -04:00
ctx . Handle ( 200 , "ssh.ListPublicKey" , err )
2014-03-10 16:54:52 +08:00
return
}
2014-03-15 22:34:33 +08:00
ctx . Data [ "PageIsUserSetting" ] = true
2014-03-18 18:31:54 -04:00
ctx . Data [ "IsUserPageSettingSSH" ] = true
2014-03-15 22:34:33 +08:00
ctx . Data [ "Keys" ] = keys
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/publickey" )
2014-03-10 16:54:52 +08:00
}
2014-03-14 17:12:28 +08:00
2014-03-15 22:34:33 +08:00
func SettingNotification ( ctx * middleware . Context ) {
2014-03-18 18:31:54 -04:00
// TODO: user setting notification
2014-03-15 22:34:33 +08:00
ctx . Data [ "Title" ] = "Notification"
ctx . Data [ "PageIsUserSetting" ] = true
2014-03-18 18:31:54 -04:00
ctx . Data [ "IsUserPageSettingNotify" ] = true
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/notification" )
2014-03-14 17:12:28 +08:00
}
2014-03-15 22:34:33 +08:00
func SettingSecurity ( ctx * middleware . Context ) {
2014-03-18 18:31:54 -04:00
// TODO: user setting security
2014-03-15 22:34:33 +08:00
ctx . Data [ "Title" ] = "Security"
ctx . Data [ "PageIsUserSetting" ] = true
2014-03-18 18:31:54 -04:00
ctx . Data [ "IsUserPageSettingSecurity" ] = true
2014-03-20 07:50:26 -04:00
ctx . HTML ( 200 , "user/security" )
2014-03-14 17:12:28 +08:00
}