Skip to content

Commit ebf114e

Browse files
committed
Fix bug when creating client tokens
It was using the user that made the request as the user to get the list of clients from, which meant for example if an admin made the request, you were limited to the names of clients that the admin also used.
1 parent c583e14 commit ebf114e

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

Diff for: api.go

+14-6
Original file line numberDiff line numberDiff line change
@@ -449,28 +449,36 @@ func (a *Api) DeleteTunnel(tokenData TokenData, params url.Values) error {
449449

450450
func (a *Api) CreateToken(tokenData TokenData, params url.Values) (string, error) {
451451

452-
owner := params.Get("owner")
453-
if owner == "" {
452+
ownerId := params.Get("owner")
453+
if ownerId == "" {
454454
return "", errors.New("Invalid owner paramater")
455455
}
456456

457457
user, _ := a.db.GetUser(tokenData.Owner)
458458

459-
if tokenData.Owner != owner && !user.IsAdmin {
459+
if tokenData.Owner != ownerId && !user.IsAdmin {
460460
return "", errors.New("Unauthorized")
461461
}
462462

463+
var owner User
464+
465+
if tokenData.Owner == ownerId {
466+
owner = user
467+
} else {
468+
owner, _ = a.db.GetUser(ownerId)
469+
}
470+
463471
client := params.Get("client")
464472

465473
if client != "any" {
466-
if _, exists := user.Clients[client]; !exists {
467-
return "", errors.New(fmt.Sprintf("Client %s does not exist for user %s", client, owner))
474+
if _, exists := owner.Clients[client]; !exists {
475+
return "", errors.New(fmt.Sprintf("Client %s does not exist for user %s", client, ownerId))
468476
}
469477
} else {
470478
client = ""
471479
}
472480

473-
token, err := a.db.AddToken(owner, client)
481+
token, err := a.db.AddToken(ownerId, client)
474482
if err != nil {
475483
return "", errors.New("Failed to create token")
476484
}

0 commit comments

Comments
 (0)