diff --git a/bee.json b/bee.json index 7930694052..ce39670600 100644 --- a/bee.json +++ b/bee.json @@ -7,9 +7,12 @@ "go_install": true, "watch_ext": [], "dir_structure": { + "watch_all": true, "controllers": "routers", "models": "", - "others": [] + "others": [ + "utils" + ] }, "cmd_args": [], "envs": [] diff --git a/gogs.go b/gogs.go index c503a4af82..6cb3f37edd 100644 --- a/gogs.go +++ b/gogs.go @@ -12,18 +12,19 @@ import ( "github.com/martini-contrib/render" "github.com/gogits/gogs/routers" + "github.com/gogits/gogs/routers/user" "github.com/gogits/gogs/utils" "github.com/gogits/gogs/utils/log" ) -const APP_VER = "0.0.0.0212" +const APP_VER = "0.0.0.0217" func init() { } func main() { - log.Info("App Name: %s", utils.Cfg.MustValue("", "APP_NAME")) + log.Info("%s %s", utils.Cfg.MustValue("", "APP_NAME"), APP_VER) m := martini.Classic() @@ -32,6 +33,8 @@ func main() { // Routers. m.Get("/", routers.Dashboard) + m.Get("/user/signin", user.SignIn) + m.Any("/user/signup", user.SignUp) listenAddr := fmt.Sprintf("%s:%s", utils.Cfg.MustValue("server", "HTTP_ADDR"), diff --git a/models/access.go b/models/access.go index 11bb360afa..ea5cbfaa50 100644 --- a/models/access.go +++ b/models/access.go @@ -1,3 +1,7 @@ +// 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 models import ( @@ -6,8 +10,8 @@ import ( ) const ( - Readable = iota + 1 - Writable + AU_READABLE = iota + 1 + AU_WRITABLE ) type Access struct { @@ -24,6 +28,11 @@ func AddAccess(access *Access) error { } // if one user can read or write one repository -func HasAccess(userName, repoName, mode string) (bool, error) { - return orm.Get(&Access{0, strings.ToLower(userName), strings.ToLower(repoName), mode}) +func HasAccess(userName, repoName string, mode int) (bool, error) { + return orm.Get(&Access{ + Id: 0, + UserName: strings.ToLower(userName), + RepoName: strings.ToLower(repoName), + Mode: mode, + }) } diff --git a/models/user.go b/models/user.go index 6ea329c526..44dadb9a5f 100644 --- a/models/user.go +++ b/models/user.go @@ -98,6 +98,10 @@ func RegisterUser(user *User) (err error) { if err = validateUser(user.Name); err != nil { return err } + user.LowerName = strings.ToLower(user.Name) + // TODO: generate Avatar address. + user.Created = time.Now() + user.Updated = time.Now() _, err = orm.Insert(user) return err } diff --git a/routers/user/user.go b/routers/user/user.go new file mode 100644 index 0000000000..f9dc07f26d --- /dev/null +++ b/routers/user/user.go @@ -0,0 +1,38 @@ +// 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 ( + "fmt" + "net/http" + + "github.com/martini-contrib/render" + + //"github.com/gogits/gogs/utils/log" + "github.com/gogits/gogs/models" +) + +func SignIn(r render.Render) { + r.Redirect("/user/signup", 302) +} + +func SignUp(req *http.Request, r render.Render) { + if req.Method == "GET" { + r.HTML(200, "user/signup", map[string]interface{}{ + "Title": "Sign Up", + }) + return + } + + // TODO: validate form. + err := models.RegisterUser(&models.User{ + Name: req.FormValue("username"), + Email: req.FormValue("email"), + Passwd: req.FormValue("passwd"), + }) + r.HTML(403, "status/403", map[string]interface{}{ + "Title": fmt.Sprintf("%v", err), + }) +} diff --git a/templates/base/base.tmpl b/templates/base/base.tmpl deleted file mode 100644 index f75230d9af..0000000000 --- a/templates/base/base.tmpl +++ /dev/null @@ -1,15 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - {{template "base/head" .}} - {{template "head" .}} - </head> - <body> - <noscript>Please enable JavaScript in your browser!</noscript> - {{template "base/navbar" .}} - <div class="container"> - {{template "body" .}} - </div> - {{template "base/footer" .}} - </body> -</html> \ No newline at end of file diff --git a/templates/base/footer.tmpl b/templates/base/footer.tmpl index e69de29bb2..4d4a7e5285 100644 --- a/templates/base/footer.tmpl +++ b/templates/base/footer.tmpl @@ -0,0 +1,2 @@ + </body> +</html> \ No newline at end of file diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl index 71c0713963..9e48040f21 100644 --- a/templates/base/head.tmpl +++ b/templates/base/head.tmpl @@ -1,14 +1,22 @@ -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="shortcut icon" href="img/favicon.png" /> -<meta name="author" content="Gogs - Go Git Service" /> -<meta name="description" content="Gogs(Go Git Service) is a GitHub-like clone in the Go Programming Language" /> -<meta name="keywords" content="go, git"> +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <link rel="shortcut icon" href="/img/favicon.png" /> + <meta name="author" content="Gogs - Go Git Service" /> + <meta name="description" content="Gogs(Go Git Service) is a GitHub-like clone in the Go Programming Language" /> + <meta name="keywords" content="go, git"> - <!-- Stylesheets --> -<link href="css/bootstrap.min.css" rel="stylesheet" /> -<link href="css/todc-bootstrap.min.css" rel="stylesheet" /> -<link href="css/font-awesome.min.css" rel="stylesheet" /> -<link href="css/gogs.css" rel="stylesheet" /> + <!-- Stylesheets --> + <link href="/css/bootstrap.min.css" rel="stylesheet" /> + <link href="/css/todc-bootstrap.min.css" rel="stylesheet" /> + <link href="/css/font-awesome.min.css" rel="stylesheet" /> + <link href="/css/gogs.css" rel="stylesheet" /> -<script src="js/jquery-1.10.1.min.js"></script> -<script src="js/bootstrap.min.js"></script> \ No newline at end of file + <script src="/js/jquery-1.10.1.min.js"></script> + <script src="/js/bootstrap.min.js"></script> + + <title>{{.Title}} | Gogs - Go Git Service</title> + </head> + <body> + <noscript>Please enable JavaScript in your browser!</noscript> \ No newline at end of file diff --git a/templates/base/navbar.tmpl b/templates/base/navbar.tmpl index 79ba1ac535..16d76688de 100644 --- a/templates/base/navbar.tmpl +++ b/templates/base/navbar.tmpl @@ -4,7 +4,7 @@ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#gogs-navbar-collapse"> <i class="fa fa-bars"></i> </button> - <a class="navbar-brand" href="/"><img src="img/favicon.png" alt="Gogs Logo"></a> + <a class="navbar-brand" href="/"><img src="/img/favicon.png" alt="Gogs Logo"></a> </div> <div class="collapse navbar-collapse" id="gopmweb-navbar-collapse"> @@ -12,7 +12,7 @@ <li><a>{{.Title}}</a></li> </ul> - <a href="/login" class="navbar-right btn btn-success navbar-btn">Log In</a> + <a href="/user/signin" class="navbar-right btn btn-success navbar-btn">Sign In</a> </div> </div> </nav> diff --git a/templates/dashboard.tmpl b/templates/dashboard.tmpl index b91df21e27..25a63827b7 100644 --- a/templates/dashboard.tmpl +++ b/templates/dashboard.tmpl @@ -1,5 +1,6 @@ -{{template "base/base" .}} -{{define "head"}} <title>{{.Title}} | Gogs - Go Git Service</title>{{end}} -{{define "body"}} -Website is still in the progress of building...please come back later! -{{end}} \ No newline at end of file +{{template "base/head" .}} +{{template "base/navbar" .}} +<div class="container"> + Website is still in the progress of building...please come back later! +</div> +{{template "base/footer" .}} \ No newline at end of file diff --git a/templates/status/403.tmpl b/templates/status/403.tmpl new file mode 100644 index 0000000000..03a88479dd --- /dev/null +++ b/templates/status/403.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +{{template "base/navbar" .}} +<div class="container"> + 403 Forbidden +</div> +{{template "base/footer" .}} \ No newline at end of file diff --git a/templates/user/signup.tmpl b/templates/user/signup.tmpl new file mode 100644 index 0000000000..8e1f1493c0 --- /dev/null +++ b/templates/user/signup.tmpl @@ -0,0 +1,44 @@ +{{template "base/head" .}} +{{template "base/navbar" .}} +<div class="container"> + <form action="/user/signup" method="post" class="form-horizontal"> + <div class="form-group"> + <label class="col-md-4 control-label">Username: </label> + <div class="col-md-3"> + <input name="username" class="form-control" placeholder="Type your username"> + </div> + </div> + + <div class="form-group"> + <label class="col-md-4 control-label">Email: </label> + <div class="col-md-3"> + <input name="email" class="form-control" placeholder="Type your e-mail address"> + </div> + </div> + + <div class="form-group"> + <label class="col-md-4 control-label">Password: </label> + <div class="col-md-3"> + <input name="passwd" type="password" class="form-control" placeholder="Type your password"> + </div> + </div> + + <div class="form-group"> + <label class="col-md-4 control-label">Re-type: </label> + <div class="col-md-3"> + <input type="password" class="form-control" placeholder="Re-type your password"> + </div> + </div> + + <div class="form-group"> + <div class="col-md-offset-4 col-md-3"> + <button type="submit" class="btn btn-info">Sign Up</button> + </div> + </div> + + <div class="col-md-offset-4 col-md-3"> + <a href="/user/signin">Already have an account? Sign in now!</a> + </div> + </form> +</div> +{{template "base/footer" .}} \ No newline at end of file