Merge branch 'master' into implement-waygate

This commit is contained in:
Anders Pitman 2022-03-07 13:23:12 -07:00
commit da4b2d1035
3 changed files with 58 additions and 3 deletions

10
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,10 @@
---
name: Bug report
about: Please report bugs over at https://forum.indiebits.io/c/boringproxy/9
title: ''
labels: ''
assignees: ''
---
Please report bugs over at https://forum.indiebits.io/c/boringproxy/9

View File

@ -0,0 +1,10 @@
---
name: Feature request
about: Please request features over at https://forum.indiebits.io/c/boringproxy/9
title: ''
labels: ''
assignees: ''
---
Please request features over at https://forum.indiebits.io/c/boringproxy/9

41
api.go
View File

@ -154,11 +154,14 @@ func (a *Api) handleUsers(w http.ResponseWriter, r *http.Request) {
if tokenData.Client != "" {
w.WriteHeader(403)
io.WriteString(w, "Token cannot be used to create users")
io.WriteString(w, "Token cannot be used to manage users")
return
}
switch r.Method {
case "GET":
users := a.GetUsers(tokenData, r.Form)
json.NewEncoder(w).Encode(users)
case "POST":
err := a.CreateUser(tokenData, r.Form)
if err != nil {
@ -195,6 +198,9 @@ func (a *Api) handleTokens(w http.ResponseWriter, r *http.Request) {
}
switch r.Method {
case "GET":
tokens := a.GetTokens(tokenData, r.Form)
json.NewEncoder(w).Encode(tokens)
case "POST":
r.ParseForm()
token, err := a.CreateToken(tokenData, r.Form)
@ -206,7 +212,7 @@ func (a *Api) handleTokens(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, token)
default:
w.WriteHeader(405)
w.Write([]byte(err.Error()))
fmt.Fprintf(w, "Invalid method for /api/tokens")
}
}
@ -266,7 +272,7 @@ func (a *Api) handleClients(w http.ResponseWriter, r *http.Request) {
}
default:
w.WriteHeader(405)
w.Write([]byte(err.Error()))
fmt.Fprintf(w, "Invalid method for /api/clients")
}
}
@ -498,6 +504,35 @@ func (a *Api) DeleteToken(tokenData TokenData, params url.Values) error {
}
func (a *Api) GetTokens(tokenData TokenData, params url.Values) map[string]TokenData {
tokens := a.db.GetTokens()
user, _ := a.db.GetUser(tokenData.Owner)
for key, tok := range tokens {
if !user.IsAdmin && tok.Owner != tokenData.Owner {
delete(tokens, key)
}
}
return tokens
}
func (a *Api) GetUsers(tokenData TokenData, params url.Values) map[string]User {
user, _ := a.db.GetUser(tokenData.Owner)
users := a.db.GetUsers()
if user.IsAdmin {
return users
} else {
return map[string]User{
tokenData.Owner: user,
}
}
}
func (a *Api) CreateUser(tokenData TokenData, params url.Values) error {
user, _ := a.db.GetUser(tokenData.Owner)