func (_ FilesResource) ApiCreate(res kit.Resource, obj kit.Model, r kit.Request) kit.Response { // Verify that tmp path is set either in metadata or on model. file := obj.(kit.File) if file.GetTmpPath() == "" { file.SetTmpPath(r.GetMeta().String("file")) } filePath := file.GetTmpPath() if filePath == "" { return kit.NewErrorResponse("no_tmp_path", "A tmp path must be set when creating a file", true) } tmpPath := getTmpPath(res) if !strings.HasPrefix(filePath, tmpPath) && filePath[0] != '/' { filePath = tmpPath + string(os.PathSeparator) + filePath file.SetTmpPath(filePath) } // Build the file, save it to backend and persist it to the db. err := res.Registry().FileService().BuildFile(file, r.GetUser(), true, true) if err != nil { kit.NewErrorResponse(err) } return &kit.AppResponse{ Data: file, } }
// Creating a session is equivalent to logging in. func (hooks SessionResourceHooks) ApiCreate(res kit.Resource, obj kit.Model, r kit.Request) kit.Response { userService := res.Registry().UserService() meta := r.GetMeta() isAnonymous, _ := meta.Bool("anonymous") // Find user. userIdentifier := meta.String("user") adaptor := meta.String("adaptor") data, _ := meta.Map("authData") var user kit.User if !isAnonymous { if adaptor == "" { return kit.NewErrorResponse("adaptor_missing", "Expected 'adaptor' in metadata.", true) } if data == nil { kit.NewErrorResponse("no_or_invalid_auth_data", "Expected 'authData' dictionary in metadata.") } var err apperror.Error user, err = userService.AuthenticateUser(userIdentifier, adaptor, data) if err != nil { return kit.NewErrorResponse(err) } } session, err := userService.StartSession(user, r.GetFrontend()) if err != nil { return kit.NewErrorResponse(err) } responseMeta := make(map[string]interface{}) if !isAnonymous { userData, err := res.Backend().ModelToMap(user, true, false) if err != nil { return kit.NewErrorResponse("marshal_error", err) } responseMeta["user"] = userData if user.GetProfile() != nil { profileData, err := res.Backend().ModelToMap(user.GetProfile(), true, false) if err != nil { return kit.NewErrorResponse("marshal_error", err) } responseMeta["profile"] = profileData } } return &kit.AppResponse{ Data: session, Meta: responseMeta, } }
func (hooks UserResourceHooks) ApiCreate(res kit.Resource, obj kit.Model, r kit.Request) kit.Response { meta := r.GetMeta() adaptor := meta.String("adaptor") if adaptor == "" { return kit.NewErrorResponse("adaptor_missing", "Expected 'adaptor' in metadata.", true) } rawData, ok := meta.Get("authData") if !ok { return kit.NewErrorResponse("auth_data_missing", "Expected 'authData' in metadata.", true) } data, ok := rawData.(map[string]interface{}) if !ok { return kit.NewErrorResponse("invalid_auth_data", "Invalid auth data: expected dictionary", true) } user := obj.(kit.User) service := res.Registry().UserService() // If a profile model was registered, and profile data is in meta, // create the profile model. if profiles := service.ProfileResource(); profiles != nil { profile := profiles.CreateModel().(kit.UserProfile) if rawData, ok := meta.Get("profile"); ok { if data, ok := rawData.(map[string]interface{}); ok { // Profile data present in meta. // Update profile with data. if err := res.ModelInfo().UpdateModelFromData(profile, data); err != nil { return kit.NewErrorResponse("invalid_profile_data", "Invalid profile data.", err, true) } } } user.SetProfile(profile) } if err := service.CreateUser(user, adaptor, data); err != nil { return kit.NewErrorResponse(err) } return &kit.AppResponse{ Data: user, } }