2014-02-19 13:50:53 +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 main
import (
"fmt"
2014-02-19 23:49:08 +04:00
"html/template"
2014-02-19 13:50:53 +04:00
"net/http"
"github.com/codegangsta/cli"
"github.com/codegangsta/martini"
"github.com/martini-contrib/render"
2014-03-03 18:44:51 +04:00
"github.com/martini-contrib/sessions"
2014-02-19 13:50:53 +04:00
2014-03-06 11:21:44 +04:00
"github.com/gogits/binding"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
2014-03-08 02:22:15 +04:00
"github.com/gogits/gogs/modules/log"
2014-02-19 13:50:53 +04:00
"github.com/gogits/gogs/routers"
2014-02-20 06:45:43 +04:00
"github.com/gogits/gogs/routers/repo"
2014-02-19 13:50:53 +04:00
"github.com/gogits/gogs/routers/user"
)
var CmdWeb = cli . Command {
Name : "web" ,
Usage : "just run" ,
Description : `
gogs web ` ,
Action : runWeb ,
2014-03-13 10:09:36 +04:00
Flags : [ ] cli . Flag { } ,
2014-02-19 13:50:53 +04:00
}
2014-03-14 19:54:16 +04:00
func Subtract ( left interface { } , right interface { } ) interface { } {
var rleft , rright int64
var fleft , fright float64
var isInt bool = true
switch left . ( type ) {
case int :
rleft = int64 ( left . ( int ) )
case int8 :
rleft = int64 ( left . ( int8 ) )
case int16 :
rleft = int64 ( left . ( int16 ) )
case int32 :
rleft = int64 ( left . ( int32 ) )
case int64 :
rleft = left . ( int64 )
case float32 :
fleft = float64 ( left . ( float32 ) )
isInt = false
case float64 :
fleft = left . ( float64 )
isInt = false
}
switch right . ( type ) {
case int :
rright = int64 ( right . ( int ) )
case int8 :
rright = int64 ( right . ( int8 ) )
case int16 :
rright = int64 ( right . ( int16 ) )
case int32 :
rright = int64 ( right . ( int32 ) )
case int64 :
rright = right . ( int64 )
case float32 :
fright = float64 ( left . ( float32 ) )
isInt = false
case float64 :
fleft = left . ( float64 )
isInt = false
}
if isInt {
return rleft - rright
} else {
return fleft + float64 ( rleft ) - ( fright + float64 ( rright ) )
}
}
2014-02-19 23:49:08 +04:00
var AppHelpers template . FuncMap = map [ string ] interface { } {
"AppName" : func ( ) string {
2014-03-08 02:22:15 +04:00
return base . Cfg . MustValue ( "" , "APP_NAME" )
2014-02-19 23:49:08 +04:00
} ,
2014-03-08 02:08:21 +04:00
"AppVer" : func ( ) string {
return APP_VER
} ,
2014-03-14 10:40:07 +04:00
"TimeSince" : base . TimeSince ,
2014-03-14 19:54:16 +04:00
"Subtract" : Subtract ,
2014-02-19 23:49:08 +04:00
}
2014-02-19 13:50:53 +04:00
func runWeb ( * cli . Context ) {
2014-03-08 02:22:15 +04:00
log . Info ( "%s %s" , base . Cfg . MustValue ( "" , "APP_NAME" ) , APP_VER )
2014-02-19 13:50:53 +04:00
m := martini . Classic ( )
2014-03-08 02:08:21 +04:00
// Middlewares.
2014-02-19 23:49:08 +04:00
m . Use ( render . Renderer ( render . Options { Funcs : [ ] template . FuncMap { AppHelpers } } ) )
2014-03-06 11:21:44 +04:00
m . Use ( base . InitContext ( ) )
2014-02-19 13:50:53 +04:00
2014-03-03 18:44:51 +04:00
// TODO: should use other store because cookie store is not secure.
store := sessions . NewCookieStore ( [ ] byte ( "secret123" ) )
m . Use ( sessions . Sessions ( "my_session" , store ) )
2014-02-19 13:50:53 +04:00
// Routers.
2014-03-08 01:05:18 +04:00
m . Get ( "/" , auth . SignInRequire ( false ) , routers . Home )
m . Any ( "/user/login" , auth . SignOutRequire ( ) , binding . BindIgnErr ( auth . LogInForm { } ) , user . SignIn )
m . Any ( "/user/logout" , auth . SignInRequire ( true ) , user . SignOut )
m . Any ( "/user/sign_up" , auth . SignOutRequire ( ) , binding . BindIgnErr ( auth . RegisterForm { } ) , user . SignUp )
m . Any ( "/user/delete" , auth . SignInRequire ( true ) , user . Delete )
2014-03-13 09:14:43 +04:00
m . Get ( "/user/feeds" , binding . Bind ( auth . FeedsForm { } ) , user . Feeds )
2014-03-10 12:54:52 +04:00
2014-03-13 11:39:18 +04:00
m . Any ( "/user/setting" , auth . SignInRequire ( true ) , binding . BindIgnErr ( auth . UpdateProfileForm { } ) , user . Setting )
2014-03-14 09:12:07 +04:00
m . Any ( "/user/setting/password" , auth . SignInRequire ( true ) , binding . BindIgnErr ( auth . UpdatePasswdForm { } ) , user . SettingPassword )
2014-03-11 04:48:58 +04:00
m . Any ( "/user/setting/ssh" , auth . SignInRequire ( true ) , binding . BindIgnErr ( auth . AddSSHKeyForm { } ) , user . SettingSSHKeys )
2014-03-14 19:54:16 +04:00
m . Any ( "/user/setting/notification" , auth . SignInRequire ( true ) , user . SettingNotification )
m . Any ( "/user/setting/security" , auth . SignInRequire ( true ) , user . SettingSecurity )
2014-03-10 12:54:52 +04:00
2014-03-08 02:08:21 +04:00
m . Get ( "/user/:username" , auth . SignInRequire ( false ) , user . Profile )
2014-03-09 06:25:38 +04:00
m . Any ( "/repo/create" , auth . SignInRequire ( true ) , binding . BindIgnErr ( auth . CreateRepoForm { } ) , repo . Create )
2014-03-13 10:39:09 +04:00
m . Any ( "/repo/delete" , auth . SignInRequire ( true ) , binding . Bind ( auth . DeleteRepoForm { } ) , repo . Delete )
2014-03-08 02:08:21 +04:00
m . Any ( "/repo/list" , auth . SignInRequire ( false ) , repo . List )
2014-03-13 10:08:49 +04:00
m . Get ( "/:username/:reponame/settings" , auth . SignInRequire ( false ) , auth . RepoAssignment ( true ) , repo . Setting )
2014-03-14 19:54:16 +04:00
m . Get ( "/:username/:reponame/tree/:branchname/**" ,
auth . SignInRequire ( false ) , auth . RepoAssignment ( true ) , repo . Single )
m . Get ( "/:username/:reponame/tree/:branchname" ,
auth . SignInRequire ( false ) , auth . RepoAssignment ( true ) , repo . Single )
2014-03-13 08:50:07 +04:00
m . Get ( "/:username/:reponame" , auth . SignInRequire ( false ) , auth . RepoAssignment ( true ) , repo . Single )
2014-02-19 13:50:53 +04:00
2014-03-13 09:14:43 +04:00
//m.Get("/:username/:reponame", repo.Repo)
2014-02-19 13:50:53 +04:00
listenAddr := fmt . Sprintf ( "%s:%s" ,
2014-03-08 02:22:15 +04:00
base . Cfg . MustValue ( "server" , "HTTP_ADDR" ) ,
base . Cfg . MustValue ( "server" , "HTTP_PORT" , "3000" ) )
2014-02-19 13:50:53 +04:00
log . Info ( "Listen: %s" , listenAddr )
http . ListenAndServe ( listenAddr , m )
}