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 ,
Flags : [ ] cli . Flag {
//cli.BoolFlag{"update, u", "update pakcage(s) and dependencies if any"},
//cli.BoolFlag{"verbose, v", "show process details"},
} ,
}
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-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-08 02:08:21 +04:00
m . Get ( "/user/:username" , auth . SignInRequire ( false ) , user . Profile )
m . Any ( "/user/publickey/add" , auth . SignInRequire ( true ) , user . AddPublicKey )
m . Any ( "/user/publickey/list" , auth . SignInRequire ( true ) , user . ListPublicKey )
2014-03-08 01:05:18 +04:00
m . Any ( "/repo/create" , auth . SignInRequire ( true ) , repo . Create )
m . Any ( "/repo/delete" , auth . SignInRequire ( true ) , repo . Delete )
2014-03-08 02:08:21 +04:00
m . Any ( "/repo/list" , auth . SignInRequire ( false ) , repo . List )
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 )
}