databag/net/server/internal/api_getAccountUsername.go

58 lines
1.3 KiB
Go
Raw Normal View History

2022-01-16 07:25:43 +00:00
package databag
import (
2022-03-11 07:57:27 +00:00
"errors"
2022-07-21 06:26:52 +00:00
"strings"
2022-01-16 07:25:43 +00:00
"net/http"
"databag/internal/store"
)
type accountUsername struct {
Username string
}
func GetAccountUsername(w http.ResponseWriter, r *http.Request) {
2022-03-11 07:57:27 +00:00
2022-06-08 19:52:06 +00:00
if r.FormValue("token") != "" {
token, _, res := AccessToken(r)
if res != nil || token.TokenType != APP_TOKENCREATE {
ErrResponse(w, http.StatusUnauthorized, res)
return
}
} else {
2022-03-11 07:57:27 +00:00
if available, err := getAvailableAccounts(); err != nil {
ErrResponse(w, http.StatusInternalServerError, err)
return
} else if available == 0 {
2022-06-08 19:52:06 +00:00
ErrResponse(w, http.StatusForbidden, errors.New("no open accounts available"))
2022-03-11 07:57:27 +00:00
return
}
2022-01-16 07:25:43 +00:00
}
2022-03-11 21:40:29 +00:00
username := r.URL.Query().Get("name")
2022-01-16 07:25:43 +00:00
if username == "" {
2022-03-11 07:57:27 +00:00
ErrResponse(w, http.StatusBadRequest, errors.New("specify a username"))
2022-01-16 07:25:43 +00:00
return
}
2022-07-21 06:26:52 +00:00
if strings.Contains(username, " ") || strings.Contains(username, "\t") {
WriteResponse(w, false)
return
}
2022-01-16 07:25:43 +00:00
var accounts []accountUsername;
2022-03-11 07:57:27 +00:00
err := store.DB.Model(&store.Account{}).Where("username = ?", username).Find(&accounts).Error
2022-01-16 07:25:43 +00:00
if err != nil {
LogMsg("failed to query accounts")
w.WriteHeader(http.StatusInternalServerError)
return
}
if len(accounts) == 0 {
WriteResponse(w, true)
} else {
WriteResponse(w, false)
}
}