mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-01 05:36:19 +01:00
Add SignInRequire and SignOutRequire middleware
This commit is contained in:
parent
8e821c75d7
commit
ba5c7ea771
8 changed files with 135 additions and 99 deletions
2
gogs.go
2
gogs.go
|
@ -19,7 +19,7 @@ import (
|
||||||
// Test that go1.1 tag above is included in builds. main.go refers to this definition.
|
// Test that go1.1 tag above is included in builds. main.go refers to this definition.
|
||||||
const go11tag = true
|
const go11tag = true
|
||||||
|
|
||||||
const APP_VER = "0.0.1.0306"
|
const APP_VER = "0.0.1.0307"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||||
|
|
82
modules/auth/user.go
Normal file
82
modules/auth/user.go
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
// 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 auth
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/codegangsta/martini"
|
||||||
|
"github.com/martini-contrib/render"
|
||||||
|
"github.com/martini-contrib/sessions"
|
||||||
|
|
||||||
|
"github.com/gogits/gogs/models"
|
||||||
|
"github.com/gogits/gogs/modules/base"
|
||||||
|
"github.com/gogits/gogs/utils/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SignedInId(session sessions.Session) int64 {
|
||||||
|
userId := session.Get("userId")
|
||||||
|
if userId == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
if s, ok := userId.(int64); ok {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func SignedInName(session sessions.Session) string {
|
||||||
|
userName := session.Get("userName")
|
||||||
|
if userName == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if s, ok := userName.(string); ok {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func SignedInUser(session sessions.Session) *models.User {
|
||||||
|
id := SignedInId(session)
|
||||||
|
if id <= 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
user, err := models.GetUserById(id)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("user.SignedInUser: %v", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return user
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsSignedIn(session sessions.Session) bool {
|
||||||
|
return SignedInId(session) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SignInRequire checks user status from session.
|
||||||
|
// It will assign correspoding values to
|
||||||
|
// template data map if user has signed in.
|
||||||
|
func SignInRequire(redirect bool) martini.Handler {
|
||||||
|
return func(r render.Render, data base.TmplData, session sessions.Session) {
|
||||||
|
if !IsSignedIn(session) {
|
||||||
|
if redirect {
|
||||||
|
r.Redirect("/")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
data["IsSigned"] = true
|
||||||
|
data["SignedUserId"] = SignedInId(session)
|
||||||
|
data["SignedUserName"] = SignedInName(session)
|
||||||
|
data["Avatar"] = SignedInUser(session).Avatar
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SignOutRequire() martini.Handler {
|
||||||
|
return func(r render.Render, session sessions.Session) {
|
||||||
|
if IsSignedIn(session) {
|
||||||
|
r.Redirect("/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,14 +5,16 @@
|
||||||
package routers
|
package routers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gogits/gogs/modules/base"
|
|
||||||
"github.com/gogits/gogs/routers/user"
|
|
||||||
"github.com/martini-contrib/render"
|
"github.com/martini-contrib/render"
|
||||||
"github.com/martini-contrib/sessions"
|
"github.com/martini-contrib/sessions"
|
||||||
|
|
||||||
|
"github.com/gogits/gogs/modules/auth"
|
||||||
|
"github.com/gogits/gogs/modules/base"
|
||||||
|
"github.com/gogits/gogs/routers/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Home(r render.Render, data base.TmplData, session sessions.Session) {
|
func Home(r render.Render, data base.TmplData, session sessions.Session) {
|
||||||
if user.IsSignedIn(session) {
|
if auth.IsSignedIn(session) {
|
||||||
user.Dashboard(r, data, session)
|
user.Dashboard(r, data, session)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,19 +10,21 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/martini-contrib/render"
|
"github.com/martini-contrib/render"
|
||||||
|
"github.com/martini-contrib/sessions"
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/routers/user"
|
"github.com/gogits/gogs/modules/auth"
|
||||||
"github.com/martini-contrib/sessions"
|
"github.com/gogits/gogs/modules/base"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Create(req *http.Request, r render.Render, session sessions.Session) {
|
func Create(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
|
||||||
|
data["Title"] = "Create repository"
|
||||||
|
|
||||||
if req.Method == "GET" {
|
if req.Method == "GET" {
|
||||||
r.HTML(200, "repo/create", map[string]interface{}{
|
r.HTML(200, "repo/create", map[string]interface{}{
|
||||||
"Title": "Create repository",
|
"UserName": auth.SignedInName(session),
|
||||||
"UserName": user.SignedInName(session),
|
"UserId": auth.SignedInId(session),
|
||||||
"UserId": user.SignedInId(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
"IsSigned": user.IsSignedIn(session),
|
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -42,7 +44,7 @@ func Create(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
r.HTML(200, "repo/created", map[string]interface{}{
|
r.HTML(200, "repo/created", map[string]interface{}{
|
||||||
"RepoName": u.Name + "/" + req.FormValue("name"),
|
"RepoName": u.Name + "/" + req.FormValue("name"),
|
||||||
"IsSigned": user.IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -51,7 +53,7 @@ func Create(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.HTML(200, "base/error", map[string]interface{}{
|
r.HTML(200, "base/error", map[string]interface{}{
|
||||||
"Error": fmt.Sprintf("%v", err),
|
"Error": fmt.Sprintf("%v", err),
|
||||||
"IsSigned": user.IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,7 +62,7 @@ func Delete(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
if req.Method == "GET" {
|
if req.Method == "GET" {
|
||||||
r.HTML(200, "repo/delete", map[string]interface{}{
|
r.HTML(200, "repo/delete", map[string]interface{}{
|
||||||
"Title": "Delete repository",
|
"Title": "Delete repository",
|
||||||
"IsSigned": user.IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -70,19 +72,19 @@ func Delete(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.HTML(200, "base/error", map[string]interface{}{
|
r.HTML(200, "base/error", map[string]interface{}{
|
||||||
"Error": fmt.Sprintf("%v", err),
|
"Error": fmt.Sprintf("%v", err),
|
||||||
"IsSigned": user.IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func List(req *http.Request, r render.Render, session sessions.Session) {
|
func List(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
u := user.SignedInUser(session)
|
u := auth.SignedInUser(session)
|
||||||
repos, err := models.GetRepositories(u)
|
repos, err := models.GetRepositories(u)
|
||||||
fmt.Println("repos", repos)
|
fmt.Println("repos", repos)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.HTML(200, "base/error", map[string]interface{}{
|
r.HTML(200, "base/error", map[string]interface{}{
|
||||||
"Error": fmt.Sprintf("%v", err),
|
"Error": fmt.Sprintf("%v", err),
|
||||||
"IsSigned": user.IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -90,6 +92,6 @@ func List(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
r.HTML(200, "repo/list", map[string]interface{}{
|
r.HTML(200, "repo/list", map[string]interface{}{
|
||||||
"Title": "repositories",
|
"Title": "repositories",
|
||||||
"Repos": repos,
|
"Repos": repos,
|
||||||
"IsSigned": user.IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,21 +9,22 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/martini-contrib/render"
|
"github.com/martini-contrib/render"
|
||||||
|
"github.com/martini-contrib/sessions"
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/martini-contrib/sessions"
|
"github.com/gogits/gogs/modules/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
func AddPublicKey(req *http.Request, r render.Render, session sessions.Session) {
|
func AddPublicKey(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
if req.Method == "GET" {
|
if req.Method == "GET" {
|
||||||
r.HTML(200, "user/publickey_add", map[string]interface{}{
|
r.HTML(200, "user/publickey_add", map[string]interface{}{
|
||||||
"Title": "Add Public Key",
|
"Title": "Add Public Key",
|
||||||
"IsSigned": IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
k := &models.PublicKey{OwnerId: SignedInId(session),
|
k := &models.PublicKey{OwnerId: auth.SignedInId(session),
|
||||||
Name: req.FormValue("keyname"),
|
Name: req.FormValue("keyname"),
|
||||||
Content: req.FormValue("key_content"),
|
Content: req.FormValue("key_content"),
|
||||||
}
|
}
|
||||||
|
@ -31,7 +32,7 @@ func AddPublicKey(req *http.Request, r render.Render, session sessions.Session)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.HTML(403, "status/403", map[string]interface{}{
|
r.HTML(403, "status/403", map[string]interface{}{
|
||||||
"Title": fmt.Sprintf("%v", err),
|
"Title": fmt.Sprintf("%v", err),
|
||||||
"IsSigned": IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
r.HTML(200, "user/publickey_added", map[string]interface{}{})
|
r.HTML(200, "user/publickey_added", map[string]interface{}{})
|
||||||
|
@ -39,11 +40,11 @@ func AddPublicKey(req *http.Request, r render.Render, session sessions.Session)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListPublicKey(req *http.Request, r render.Render, session sessions.Session) {
|
func ListPublicKey(req *http.Request, r render.Render, session sessions.Session) {
|
||||||
keys, err := models.ListPublicKey(SignedInId(session))
|
keys, err := models.ListPublicKey(auth.SignedInId(session))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.HTML(200, "base/error", map[string]interface{}{
|
r.HTML(200, "base/error", map[string]interface{}{
|
||||||
"Error": fmt.Sprintf("%v", err),
|
"Error": fmt.Sprintf("%v", err),
|
||||||
"IsSigned": IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -51,6 +52,6 @@ func ListPublicKey(req *http.Request, r render.Render, session sessions.Session)
|
||||||
r.HTML(200, "user/publickey_list", map[string]interface{}{
|
r.HTML(200, "user/publickey_list", map[string]interface{}{
|
||||||
"Title": "repositories",
|
"Title": "repositories",
|
||||||
"Keys": keys,
|
"Keys": keys,
|
||||||
"IsSigned": IsSignedIn(session),
|
"IsSigned": auth.IsSignedIn(session),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
//"github.com/martini-contrib/binding"
|
|
||||||
"github.com/martini-contrib/render"
|
"github.com/martini-contrib/render"
|
||||||
"github.com/martini-contrib/sessions"
|
"github.com/martini-contrib/sessions"
|
||||||
|
|
||||||
|
@ -19,80 +18,23 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func Dashboard(r render.Render, data base.TmplData, session sessions.Session) {
|
func Dashboard(r render.Render, data base.TmplData, session sessions.Session) {
|
||||||
if !IsSignedIn(session) {
|
|
||||||
// todo : direct to logout
|
|
||||||
r.Redirect("/")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
data["IsSigned"] = true
|
|
||||||
data["SignedUserId"] = SignedInId(session)
|
|
||||||
data["SignedUserName"] = SignedInName(session)
|
|
||||||
data["PageIsUserDashboard"] = true
|
|
||||||
data["Avatar"] = SignedInUser(session).Avatar
|
|
||||||
|
|
||||||
data["Title"] = "Dashboard"
|
data["Title"] = "Dashboard"
|
||||||
|
data["PageIsUserDashboard"] = true
|
||||||
r.HTML(200, "user/dashboard", data)
|
r.HTML(200, "user/dashboard", data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Profile(r render.Render, data base.TmplData, session sessions.Session) {
|
func Profile(r render.Render, data base.TmplData, session sessions.Session) {
|
||||||
data["Title"] = "Profile"
|
data["Title"] = "Profile"
|
||||||
|
|
||||||
data["IsSigned"] = IsSignedIn(session)
|
data["IsSigned"] = auth.IsSignedIn(session)
|
||||||
// TODO: Need to check view self or others.
|
// TODO: Need to check view self or others.
|
||||||
user := SignedInUser(session)
|
user := auth.SignedInUser(session)
|
||||||
data["Avatar"] = user.Avatar
|
data["Avatar"] = user.Avatar
|
||||||
data["Username"] = user.Name
|
data["Username"] = user.Name
|
||||||
r.HTML(200, "user/profile", data)
|
r.HTML(200, "user/profile", data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsSignedIn(session sessions.Session) bool {
|
|
||||||
return SignedInId(session) > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func SignedInId(session sessions.Session) int64 {
|
|
||||||
userId := session.Get("userId")
|
|
||||||
if userId == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
if s, ok := userId.(int64); ok {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func SignedInName(session sessions.Session) string {
|
|
||||||
userName := session.Get("userName")
|
|
||||||
if userName == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if s, ok := userName.(string); ok {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func SignedInUser(session sessions.Session) *models.User {
|
|
||||||
id := SignedInId(session)
|
|
||||||
if id <= 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
user, err := models.GetUserById(id)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("user.SignedInUser: %v", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return user
|
|
||||||
}
|
|
||||||
|
|
||||||
func SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render.Render, session sessions.Session) {
|
func SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render.Render, session sessions.Session) {
|
||||||
// if logged, do not show login page
|
|
||||||
if IsSignedIn(session) {
|
|
||||||
r.Redirect("/")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
data["Title"] = "Log In"
|
data["Title"] = "Log In"
|
||||||
|
|
||||||
if req.Method == "GET" {
|
if req.Method == "GET" {
|
||||||
|
@ -128,11 +70,6 @@ func SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render
|
||||||
}
|
}
|
||||||
|
|
||||||
func SignOut(r render.Render, session sessions.Session) {
|
func SignOut(r render.Render, session sessions.Session) {
|
||||||
if !IsSignedIn(session) {
|
|
||||||
r.Redirect("/")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
session.Delete("userId")
|
session.Delete("userId")
|
||||||
session.Delete("userName")
|
session.Delete("userName")
|
||||||
r.Redirect("/")
|
r.Redirect("/")
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
<input type="hidden" value="{{.UserId}}" name="userId"/>
|
<input type="hidden" value="{{.UserId}}" name="userId"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-2 control-label">Repository<strong class="text-danger">*</strong></label>
|
<label class="col-md-2 control-label">Repository<strong class="text-danger">*</strong></label>
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
@ -17,12 +18,21 @@
|
||||||
<span class="help-block">Great repository names are short and memorable. </span>
|
<span class="help-block">Great repository names are short and memorable. </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-md-2 control-label">Visibility<strong class="text-danger">*</strong></label>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<p class="form-control-static">Public</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-2 control-label">Description</label>
|
<label class="col-md-2 control-label">Description</label>
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<textarea name="desc" class="form-control" placeholder="Type your repository name"></textarea>
|
<textarea name="desc" class="form-control" placeholder="Type your repository name"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-2 control-label">Language</label>
|
<label class="col-md-2 control-label">Language</label>
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
@ -36,6 +46,7 @@
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-md-8 col-md-offset-2">
|
<div class="col-md-8 col-md-offset-2">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
|
@ -46,6 +57,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-md-offset-2 col-md-8">
|
<div class="col-md-offset-2 col-md-8">
|
||||||
<button type="submit" class="btn btn-lg btn-primary">Create repository</button>
|
<button type="submit" class="btn btn-lg btn-primary">Create repository</button>
|
||||||
|
|
16
web.go
16
web.go
|
@ -57,17 +57,17 @@ func runWeb(*cli.Context) {
|
||||||
m.Use(sessions.Sessions("my_session", store))
|
m.Use(sessions.Sessions("my_session", store))
|
||||||
|
|
||||||
// Routers.
|
// Routers.
|
||||||
m.Get("/", routers.Home)
|
m.Get("/", auth.SignInRequire(false), routers.Home)
|
||||||
m.Any("/user/login", binding.BindIgnErr(auth.LogInForm{}), user.SignIn)
|
m.Any("/user/login", auth.SignOutRequire(), binding.BindIgnErr(auth.LogInForm{}), user.SignIn)
|
||||||
m.Any("/user/logout", user.SignOut)
|
m.Any("/user/logout", auth.SignInRequire(true), user.SignOut)
|
||||||
m.Any("/user/sign_up", binding.BindIgnErr(auth.RegisterForm{}), user.SignUp)
|
m.Any("/user/sign_up", auth.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp)
|
||||||
|
|
||||||
m.Get("/user/profile", user.Profile) // should be /username
|
m.Get("/user/profile", user.Profile) // should be /username
|
||||||
m.Any("/user/delete", user.Delete)
|
m.Any("/user/delete", auth.SignInRequire(true), user.Delete)
|
||||||
m.Any("/user/publickey/add", user.AddPublicKey)
|
m.Any("/user/publickey/add", user.AddPublicKey)
|
||||||
m.Any("/user/publickey/list", user.ListPublicKey)
|
m.Any("/user/publickey/list", user.ListPublicKey)
|
||||||
m.Any("/repo/create", repo.Create)
|
|
||||||
m.Any("/repo/delete", repo.Delete)
|
m.Any("/repo/create", auth.SignInRequire(true), repo.Create)
|
||||||
|
m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete)
|
||||||
m.Any("/repo/list", repo.List)
|
m.Any("/repo/list", repo.List)
|
||||||
|
|
||||||
listenAddr := fmt.Sprintf("%s:%s",
|
listenAddr := fmt.Sprintf("%s:%s",
|
||||||
|
|
Loading…
Reference in a new issue