Browse Source

allow http push by token - #842

tags/v0.9.99
Christopher Brickley 9 years ago
parent
commit
d0827e5d5e
2 changed files with 49 additions and 7 deletions
  1. 15
    0
      models/token.go
  2. 34
    7
      routers/repo/http.go

+ 15
- 0
models/token.go View File

@@ -62,6 +62,21 @@ func ListAccessTokens(uid int64) ([]*AccessToken, error) {
return tokens, nil
}

// ListAllAccessTokens returns all access tokens
func ListAllAccessTokens() ([]*AccessToken, error) {
tokens := make([]*AccessToken, 0, 5)
err := x.Desc("id").Find(&tokens)
if err != nil {
return nil, err
}

for _, t := range tokens {
t.HasUsed = t.Updated.After(t.Created)
t.HasRecentActivity = t.Updated.Add(7 * 24 * time.Hour).After(time.Now())
}
return tokens, nil
}

// DeleteAccessTokenById deletes access token by given ID.
func DeleteAccessTokenById(id int64) error {
_, err := x.Id(id).Delete(new(AccessToken))

+ 34
- 7
routers/repo/http.go View File

@@ -78,6 +78,7 @@ func Http(ctx *middleware.Context) {
var askAuth = !isPublicPull || setting.Service.RequireSignInView
var authUser *models.User
var authUsername, passwd string
usedToken := false

// check access
if askAuth {
@@ -103,15 +104,41 @@ func Http(ctx *middleware.Context) {

authUser, err = models.GetUserByName(authUsername)
if err != nil {
ctx.Handle(401, "no basic auth and digit auth", nil)
return
// check if a token was given instead of username
tokens, err := models.ListAllAccessTokens()
if err != nil {
ctx.Handle(401, "no basic auth and digit auth", nil)
return
}

for _, token := range tokens {
if token.Sha1 == authUsername {
// get user belonging to token
authUser, err = models.GetUserById(token.Uid)
if err != nil {
ctx.Handle(401, "no basic auth and digit auth", nil)
return
}
authUsername = authUser.Name
usedToken = true
break
}
}

if authUser == nil {
ctx.Handle(401, "no basic auth and digit auth", nil)
return
}
}

newUser := &models.User{Passwd: passwd, Salt: authUser.Salt}
newUser.EncodePasswd()
if authUser.Passwd != newUser.Passwd {
ctx.Handle(401, "no basic auth and digit auth", nil)
return
// check password if token is not used
if !usedToken {
newUser := &models.User{Passwd: passwd, Salt: authUser.Salt}
newUser.EncodePasswd()
if authUser.Passwd != newUser.Passwd {
ctx.Handle(401, "no basic auth and digit auth", nil)
return
}
}

if !isPublicPull {

Loading…
Cancel
Save