// SetOrganizationLogo is the handler for PUT /organizations/globalid/logo // Set the organization Logo for the organization func (api OrganizationsAPI) SetOrganizationLogo(w http.ResponseWriter, r *http.Request) { globalid := mux.Vars(r)["globalid"] body := struct { Logo string }{} if err := json.NewDecoder(r.Body).Decode(&body); err != nil { log.Error("Error while saving logo: ", err.Error()) http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } logoMgr := organization.NewLogoManager(r) // server side file size validation check. Normally uploaded files should never get this large due to size constraints, but check anyway if len(body.Logo) > 1024*1024*5 { log.Error("Error while saving file: file too large") http.Error(w, http.StatusText(http.StatusRequestEntityTooLarge), http.StatusRequestEntityTooLarge) return } _, err := logoMgr.SaveLogo(globalid, body.Logo) if err != nil { log.Error("Error while saving logo: ", err.Error()) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) }
func (api OrganizationsAPI) actualOrganizationCreation(org organization.Organization, w http.ResponseWriter, r *http.Request) { if strings.TrimSpace(org.Globalid) == itsyouonlineGlobalID { log.Debug("Duplicate organization") http.Error(w, http.StatusText(http.StatusConflict), http.StatusConflict) return } if !org.IsValid() { log.Debug("Invalid organization") http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } username := context.Get(r, "authenticateduser").(string) orgMgr := organization.NewManager(r) logoMgr := organization.NewLogoManager(r) count, err := orgMgr.CountByUser(username) if err != nil { log.Error(err.Error()) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } if count >= MAX_ORGANIZATIONS_PER_USER { log.Error("Reached organization limit for user ", username) writeErrorResponse(w, 422, "maximum_amount_of_organizations_reached") return } err = orgMgr.Create(&org) if err != nil && err != db.ErrDuplicate { log.Error(err.Error()) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } if err == db.ErrDuplicate { log.Debug("Duplicate organization") http.Error(w, http.StatusText(http.StatusConflict), http.StatusConflict) return } err = logoMgr.Create(&org) if err != nil && err != db.ErrDuplicate { log.Error(err.Error()) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(&org) }
// DeleteOrganizationLogo is the handler for DELETE /organizations/globalid/logo // Removes the Logo from an organization func (api OrganizationsAPI) DeleteOrganizationLogo(w http.ResponseWriter, r *http.Request) { globalid := mux.Vars(r)["globalid"] logoMgr := organization.NewLogoManager(r) err := logoMgr.RemoveLogo(globalid) if err != nil { log.Error("Error removing logo", err.Error()) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusNoContent) }
// GetOrganizationLogo is the handler for GET /organizations/globalid/logo // Get the Logo from an organization func (api OrganizationsAPI) GetOrganizationLogo(w http.ResponseWriter, r *http.Request) { globalid := mux.Vars(r)["globalid"] logoMgr := organization.NewLogoManager(r) logo, err := logoMgr.GetLogo(globalid) if err != nil && err != mgo.ErrNotFound { log.Error("Error getting logo", err.Error()) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } response := struct { Logo string `json:"logo"` }{ Logo: logo, } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(response) }
// DeleteOrganization is the handler for DELETE /organizations/{globalid} // Deletes an organization and all data linked to it (join-organization-invitations, oauth_access_tokens, oauth_clients, authorizations) func (api OrganizationsAPI) DeleteOrganization(w http.ResponseWriter, r *http.Request) { globalid := mux.Vars(r)["globalid"] orgMgr := organization.NewManager(r) logoMgr := organization.NewLogoManager(r) if !orgMgr.Exists(globalid) { writeErrorResponse(w, http.StatusNotFound, "organization_not_found") return } suborganizations, err := orgMgr.GetSubOrganizations(globalid) if handleServerError(w, "fetching suborganizations", err) { return } if len(suborganizations) != 0 { writeErrorResponse(w, 422, "organization_has_children") return } err = orgMgr.Remove(globalid) if handleServerError(w, "removing organization", err) { return } // Remove the organizations as a member/ an owner of other organizations organizations, err := orgMgr.AllByOrg(globalid) if handleServerError(w, "fetching organizations where this org is an owner/a member", err) { return } for _, org := range organizations { err = orgMgr.RemoveOrganization(org.Globalid, globalid) if handleServerError(w, "removing organizations as a member / an owner of another organization", err) { return } } if logoMgr.Exists(globalid) { err = logoMgr.Remove(globalid) if handleServerError(w, "removing organization logo", err) { return } } orgReqMgr := invitations.NewInvitationManager(r) err = orgReqMgr.RemoveAll(globalid) if handleServerError(w, "removing organization invitations", err) { return } oauthMgr := oauthservice.NewManager(r) err = oauthMgr.RemoveTokensByGlobalId(globalid) if handleServerError(w, "removing organization oauth accesstokens", err) { return } err = oauthMgr.DeleteAllForOrganization(globalid) if handleServerError(w, "removing client secrets", err) { return } err = oauthMgr.RemoveClientsById(globalid) if handleServerError(w, "removing organization oauth clients", err) { return } userMgr := user.NewManager(r) err = userMgr.DeleteAllAuthorizations(globalid) if handleServerError(w, "removing all authorizations", err) { return } err = oauthMgr.RemoveClientsById(globalid) if handleServerError(w, "removing organization oauth clients", err) { return } l2faMgr := organization.NewLast2FAManager(r) err = l2faMgr.RemoveByOrganization(globalid) if handleServerError(w, "removing organization 2FA history", err) { return } w.WriteHeader(http.StatusNoContent) }