2014-02-18 03:38:50 +04: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-15 13:30:59 +04:00
"fmt"
2014-02-18 03:38:50 +04:00
"net/http"
2014-03-08 02:08:21 +04:00
"github.com/codegangsta/martini"
2014-02-18 03:38:50 +04:00
"github.com/martini-contrib/render"
2014-03-03 18:44:51 +04:00
"github.com/martini-contrib/sessions"
2014-02-18 03:38:50 +04:00
"github.com/gogits/gogs/models"
2014-03-06 11:21:44 +04:00
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
2014-03-15 15:01:50 +04:00
"github.com/gogits/gogs/modules/middleware"
2014-02-18 03:38:50 +04:00
)
2014-03-15 17:17:16 +04:00
func Dashboard ( ctx * middleware . Context ) {
ctx . Data [ "Title" ] = "Dashboard"
ctx . Data [ "PageIsUserDashboard" ] = true
repos , err := models . GetRepositories ( & models . User { Id : ctx . User . Id } )
2014-03-11 10:17:05 +04:00
if err != nil {
2014-03-15 17:17:16 +04:00
ctx . Handle ( 200 , "user.Dashboard" , err )
2014-03-11 10:17:05 +04:00
return
}
2014-03-15 17:17:16 +04:00
ctx . Data [ "MyRepos" ] = repos
2014-03-15 13:30:59 +04:00
2014-03-15 17:17:16 +04:00
feeds , err := models . GetFeeds ( ctx . User . Id , 0 , false )
2014-03-15 13:30:59 +04:00
if err != nil {
2014-03-15 17:17:16 +04:00
ctx . Handle ( 200 , "user.Dashboard" , err )
2014-03-15 13:30:59 +04:00
return
}
2014-03-15 17:17:16 +04:00
ctx . Data [ "Feeds" ] = feeds
ctx . Render . HTML ( 200 , "user/dashboard" , ctx . Data )
2014-03-06 17:33:17 +04:00
}
2014-03-15 15:01:50 +04:00
func Profile ( ctx * middleware . Context , params martini . Params ) {
ctx . Data [ "Title" ] = "Profile"
2014-03-06 22:18:19 +04:00
// TODO: Need to check view self or others.
2014-03-08 02:08:21 +04:00
user , err := models . GetUserByName ( params [ "username" ] )
if err != nil {
2014-03-15 17:17:16 +04:00
ctx . Handle ( 200 , "user.Profile" , err )
2014-03-08 02:08:21 +04:00
return
}
2014-03-15 15:01:50 +04:00
ctx . Data [ "Owner" ] = user
2014-03-15 11:28:06 +04:00
2014-03-15 15:01:50 +04:00
tab := ctx . Query ( "tab" )
ctx . Data [ "TabName" ] = tab
2014-03-15 11:28:06 +04:00
switch tab {
case "activity" :
feeds , err := models . GetFeeds ( user . Id , 0 , true )
if err != nil {
2014-03-15 17:17:16 +04:00
ctx . Handle ( 200 , "user.Profile" , err )
2014-03-15 11:28:06 +04:00
return
}
2014-03-15 15:01:50 +04:00
ctx . Data [ "Feeds" ] = feeds
2014-03-15 11:28:06 +04:00
default :
2014-03-15 08:50:51 +04:00
}
2014-03-15 11:28:06 +04:00
2014-03-15 15:01:50 +04:00
ctx . Render . HTML ( 200 , "user/profile" , ctx . Data )
2014-03-02 17:47:55 +04:00
}
2014-03-15 17:17:16 +04:00
func SignIn ( form auth . LogInForm , ctx * middleware . Context , r render . Render , session sessions . Session ) {
ctx . Data [ "Title" ] = "Log In"
2014-03-06 20:42:14 +04:00
2014-03-15 17:17:16 +04:00
if ctx . Req . Method == "GET" {
ctx . Render . HTML ( 200 , "user/signin" , ctx . Data )
2014-03-06 20:42:14 +04:00
return
}
2014-03-15 17:17:16 +04:00
if hasErr , ok := ctx . Data [ "HasError" ] ; ok && hasErr . ( bool ) {
ctx . Render . HTML ( 200 , "user/signin" , ctx . Data )
2014-03-06 20:42:14 +04:00
return
}
user , err := models . LoginUserPlain ( form . UserName , form . Password )
if err != nil {
if err . Error ( ) == models . ErrUserNotExist . Error ( ) {
2014-03-15 17:17:16 +04:00
ctx . Data [ "HasError" ] = true
ctx . Data [ "ErrorMsg" ] = "Username or password is not correct"
auth . AssignForm ( form , ctx . Data )
ctx . Render . HTML ( 200 , "user/signin" , ctx . Data )
2014-03-03 16:35:44 +04:00
return
}
2014-03-06 20:42:14 +04:00
2014-03-15 17:17:16 +04:00
ctx . Handle ( 200 , "user.SignIn" , err )
2014-03-06 20:42:14 +04:00
return
2014-03-02 11:31:06 +04:00
}
2014-03-06 20:42:14 +04:00
session . Set ( "userId" , user . Id )
session . Set ( "userName" , user . Name )
r . Redirect ( "/" )
2014-02-18 03:38:50 +04:00
}
2014-03-06 22:18:19 +04:00
func SignOut ( r render . Render , session sessions . Session ) {
session . Delete ( "userId" )
session . Delete ( "userName" )
r . Redirect ( "/" )
}
2014-03-15 17:17:16 +04:00
func SignUp ( form auth . RegisterForm , ctx * middleware . Context , data base . TmplData , req * http . Request , r render . Render ) {
2014-03-06 11:21:44 +04:00
data [ "Title" ] = "Sign Up"
2014-03-06 18:55:32 +04:00
data [ "PageIsSignUp" ] = true
2014-03-06 11:21:44 +04:00
2014-02-18 03:38:50 +04:00
if req . Method == "GET" {
2014-03-04 04:03:08 +04:00
r . HTML ( 200 , "user/signup" , data )
2014-02-18 03:38:50 +04:00
return
}
2014-03-06 20:10:35 +04:00
if form . Password != form . RetypePasswd {
data [ "HasError" ] = true
data [ "Err_Password" ] = true
data [ "Err_RetypePasswd" ] = true
data [ "ErrorMsg" ] = "Password and re-type password are not same"
auth . AssignForm ( form , data )
}
2014-03-06 11:21:44 +04:00
if hasErr , ok := data [ "HasError" ] ; ok && hasErr . ( bool ) {
r . HTML ( 200 , "user/signup" , data )
return
2014-02-19 02:31:16 +04:00
}
2014-03-04 04:03:08 +04:00
2014-03-06 11:21:44 +04:00
u := & models . User {
2014-03-06 20:10:35 +04:00
Name : form . UserName ,
2014-03-06 11:21:44 +04:00
Email : form . Email ,
Passwd : form . Password ,
2014-02-19 02:31:16 +04:00
}
2014-03-06 11:21:44 +04:00
if err := models . RegisterUser ( u ) ; err != nil {
2014-03-06 20:10:35 +04:00
data [ "HasError" ] = true
auth . AssignForm ( form , data )
switch err . Error ( ) {
case models . ErrUserAlreadyExist . Error ( ) :
2014-03-06 11:21:44 +04:00
data [ "Err_Username" ] = true
data [ "ErrorMsg" ] = "Username has been already taken"
r . HTML ( 200 , "user/signup" , data )
2014-03-06 20:10:35 +04:00
case models . ErrEmailAlreadyUsed . Error ( ) :
data [ "Err_Email" ] = true
data [ "ErrorMsg" ] = "E-mail address has been already used"
r . HTML ( 200 , "user/signup" , data )
default :
2014-03-15 17:17:16 +04:00
ctx . Handle ( 200 , "user.SignUp" , err )
2014-03-06 11:21:44 +04:00
}
2014-02-19 02:31:16 +04:00
return
}
2014-03-06 11:21:44 +04:00
r . Redirect ( "/user/login" )
2014-02-18 03:38:50 +04:00
}
2014-02-19 22:13:02 +04:00
2014-03-15 17:17:16 +04:00
func Delete ( data base . TmplData , ctx * middleware . Context , req * http . Request , session sessions . Session , r render . Render ) {
2014-03-11 07:41:38 +04:00
data [ "Title" ] = "Delete Account"
2014-03-08 02:08:21 +04:00
2014-02-20 06:45:43 +04:00
if req . Method == "GET" {
2014-03-08 02:08:21 +04:00
r . HTML ( 200 , "user/delete" , data )
2014-02-20 06:45:43 +04:00
return
}
2014-03-11 10:17:05 +04:00
id := auth . SignedInId ( session )
u := & models . User { Id : id }
2014-03-11 19:40:47 +04:00
if err := models . DeleteUser ( u ) ; err != nil {
data [ "HasError" ] = true
switch err . Error ( ) {
case models . ErrUserOwnRepos . Error ( ) :
data [ "ErrorMsg" ] = "Your account still have ownership of repository, you have to delete or transfer them first."
default :
2014-03-15 17:17:16 +04:00
ctx . Handle ( 200 , "user.Delete" , err )
2014-03-11 19:40:47 +04:00
return
}
}
r . HTML ( 200 , "user/delete" , data )
2014-02-19 22:13:02 +04:00
}
2014-03-13 09:14:43 +04:00
2014-03-15 13:30:59 +04:00
const (
feedTpl = ` < i class = "icon fa fa-%s" > < / i >
< div class = "info" > < span class = "meta" > % s < / span > < br > % s < / div > `
)
2014-03-13 10:09:36 +04:00
func Feeds ( form auth . FeedsForm , r render . Render ) {
2014-03-15 13:30:59 +04:00
actions , err := models . GetFeeds ( form . UserId , form . Page * 20 , false )
2014-03-13 09:14:43 +04:00
if err != nil {
2014-03-13 10:09:36 +04:00
r . JSON ( 500 , err )
2014-03-13 09:14:43 +04:00
}
2014-03-15 13:30:59 +04:00
feeds := make ( [ ] string , len ( actions ) )
for i := range actions {
feeds [ i ] = fmt . Sprintf ( feedTpl , base . ActionIcon ( actions [ i ] . OpType ) ,
base . TimeSince ( actions [ i ] . Created ) , base . ActionDesc ( actions [ i ] ) )
}
r . JSON ( 200 , & feeds )
2014-03-13 09:14:43 +04:00
}