-
Notifications
You must be signed in to change notification settings - Fork 0
/
token.go
55 lines (46 loc) · 1.38 KB
/
token.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main
import (
"database/sql"
"net/http"
"github.com/gorilla/mux"
"github.com/ovh/cds/engine/api/context"
"github.com/ovh/cds/engine/api/group"
"github.com/ovh/cds/engine/api/worker"
"github.com/ovh/cds/engine/log"
"github.com/ovh/cds/sdk"
)
// generateTokenHandler allows a user to generate a token associated to a group permission
// and used by worker to take action from API.
// User generating the token needs to be admin of given group
func generateTokenHandler(w http.ResponseWriter, r *http.Request, db *sql.DB, c *context.Context) {
vars := mux.Vars(r)
groupName := vars["permGroupName"]
expiration := vars["expiration"]
exp, err := sdk.ExpirationFromString(expiration)
if err != nil {
log.Warning("generateTokenHandler> '%s' -> %s\n", expiration, err)
WriteError(w, r, err)
return
}
g, err := group.LoadGroup(db, groupName)
if err != nil {
log.Warning("generateTokenHandler> cannot load group '%s': %s\n", groupName, err)
WriteError(w, r, err)
return
}
tk, err := worker.GenerateToken()
if err != nil {
log.Warning("generateTokenHandler: cannot generate key: %s\n", err)
WriteError(w, r, err)
return
}
if err := worker.InsertToken(db, g.ID, tk, exp); err != nil {
log.Warning("generateTokenHandler> cannot insert new key: %s\n", err)
WriteError(w, r, err)
return
}
s := map[string]string{
"key": tk,
}
WriteJSON(w, r, s, http.StatusOK)
}