|
|
@@ -34,22 +34,32 @@ func enrollmentKeyHandlers(r *mux.Router) {
|
|
|
// Responses:
|
|
|
// 200: getEnrollmentKeysSlice
|
|
|
func getEnrollmentKeys(w http.ResponseWriter, r *http.Request) {
|
|
|
- user, err := logic.GetUser(r.Header.Get("user"))
|
|
|
+ keys, err := logic.GetAllEnrollmentKeys()
|
|
|
if err != nil {
|
|
|
- logger.Log(0, r.Header.Get("user"), "failed to fetch user: ", err.Error())
|
|
|
+ logger.Log(0, r.Header.Get("user"), "failed to fetch enrollment keys: ", err.Error())
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
- keys, err := logic.GetAllEnrollmentKeys()
|
|
|
+ // handle masteradmin non-logged-in user
|
|
|
+ // TODO unify the user flow
|
|
|
+ headerNetworks, err := getHeaderNetworks(r)
|
|
|
if err != nil {
|
|
|
- logger.Log(0, r.Header.Get("user"), "failed to fetch enrollment keys: ", err.Error())
|
|
|
+ logger.Log(0, r.Header.Get("user"), "failed to parse networks: ", err.Error())
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ isMasterAdmin := len(headerNetworks) > 0 && headerNetworks[0] == logic.ALL_NETWORK_ACCESS
|
|
|
+ // regular user flow
|
|
|
+ user, err := logic.GetUser(r.Header.Get("user"))
|
|
|
+ if err != nil && !isMasterAdmin {
|
|
|
+ logger.Log(0, r.Header.Get("user"), "failed to fetch user: ", err.Error())
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
// TODO drop double pointer
|
|
|
- accessKeys := []*models.EnrollmentKey{}
|
|
|
+ ret := []*models.EnrollmentKey{}
|
|
|
for _, key := range keys {
|
|
|
- if !logic.UserHasNetworksAccess(key.Networks, user) {
|
|
|
+ if !isMasterAdmin && !logic.UserHasNetworksAccess(key.Networks, user) {
|
|
|
continue
|
|
|
}
|
|
|
if err = logic.Tokenize(key, servercfg.GetAPIHost()); err != nil {
|
|
|
@@ -57,12 +67,12 @@ func getEnrollmentKeys(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
- accessKeys = append(accessKeys, key)
|
|
|
+ ret = append(ret, key)
|
|
|
}
|
|
|
// return JSON/API formatted keys
|
|
|
logger.Log(2, r.Header.Get("user"), "fetched enrollment keys")
|
|
|
w.WriteHeader(http.StatusOK)
|
|
|
- json.NewEncoder(w).Encode(accessKeys)
|
|
|
+ json.NewEncoder(w).Encode(ret)
|
|
|
}
|
|
|
|
|
|
// swagger:route DELETE /api/v1/enrollment-keys/{keyID} enrollmentKeys deleteEnrollmentKey
|