func retrieveApplication(clientID string, core *roll.Core, w http.ResponseWriter, r *http.Request) { log.Info("ret appl called: ", clientID) if clientID == "" { respondError(w, http.StatusBadRequest, errors.New("Resource not specified")) return } subject, scope, err := subjectAndAdminScopeFromRequestCtx(r) if err != nil { respondError(w, http.StatusInternalServerError, nil) return } app, err := core.RetrieveApplication(clientID, subject, scope) if err != nil { respondError(w, http.StatusInternalServerError, err) return } if app == nil { respondNotFound(w) return } respondOk(w, app) }
func handleApplicationPut(core *roll.Core, w http.ResponseWriter, r *http.Request) { var app roll.Application if err := parseRequest(r, &app); err != nil { respondError(w, http.StatusBadRequest, err) return } //Make sure we use the clientID in the resource not any clientID sent in the JSON. clientID := strings.TrimPrefix(r.RequestURI, ApplicationsURI) if clientID == "" { respondError(w, http.StatusBadRequest, nil) return } app.ClientID = clientID //Validate the content if err := app.Validate(); err != nil { respondError(w, http.StatusBadRequest, err) return } //Extract the subject from the request header based on security mode subject, adminScope, err := subjectAndAdminScopeFromRequestCtx(r) if err != nil { log.Print("Error extracting subject:", err.Error()) respondError(w, http.StatusInternalServerError, nil) return } //Retrieve the app definition to update storedApp, err := core.RetrieveApplication(clientID, subject, adminScope) if err != nil { respondError(w, http.StatusInternalServerError, err) return } if storedApp == nil { respondError(w, http.StatusNotFound, nil) return } //Copy over the potential updates storedApp.ApplicationName = app.ApplicationName storedApp.DeveloperEmail = app.DeveloperEmail storedApp.LoginProvider = app.LoginProvider storedApp.RedirectURI = app.RedirectURI storedApp.DeveloperID = app.DeveloperID //Store the application definition log.Info("updating app def: ", app) err = core.UpdateApplication(&app, subject) if err != nil { log.Info("Error updating definition: ", err.Error()) switch err.(type) { case roll.NonOwnerUpdateError: respondError(w, http.StatusUnauthorized, err) case roll.NoSuchApplicationError: respondError(w, http.StatusNotFound, err) default: respondError(w, http.StatusInternalServerError, err) } } respondOk(w, nil) }