// HandleUpdate or PUT /users/1/update func HandleUpdate(context router.Context) error { // Find the user id := context.ParamInt("id") user, err := users.Find(id) if err != nil { context.Logf("#error Error finding user %s", err) return router.NotFoundError(err) } // Authorise err = authorise.Resource(context, user) if err != nil { return router.NotAuthorizedError(err) } // We expect only one image, what about replacing the existing when updating? // At present we just create a new image files, err := context.ParamFiles("image") if err != nil { return router.InternalError(err) } // Get the params params, err := context.Params() if err != nil { return router.InternalError(err) } var imageID int64 if len(files) > 0 { fileHandle := files[0] // Create an image (saving the image representation on disk) imageParams := map[string]string{"name": user.Name, "status": "100"} imageID, err = images.Create(imageParams, fileHandle) if err != nil { return router.InternalError(err) } params.Set("image_id", fmt.Sprintf("%d", imageID)) delete(params, "image") } err = user.Update(params.Map()) if err != nil { return router.InternalError(err) } // Redirect to user return router.Redirect(context, user.URLShow()) }
// HandleCreate responds to POST images/create func HandleCreate(context router.Context) error { // Authorise err := authorise.Path(context) if err != nil { return router.NotAuthorizedError(err) } // We expect only one image, what about replacing the existing when updating? // At present we just create a new image files, err := context.ParamFiles("image") if err != nil { return router.InternalError(err) } if len(files) == 0 { return router.NotFoundError(nil) } // Get the params params, err := context.Params() if err != nil { return router.InternalError(err) } id, err := images.Create(params.Map(), files[0]) if err != nil { context.Logf("#error Error creating image,%s", err) return router.InternalError(err) } // Log creation context.Logf("#info Created image id,%d", id) // Redirect to the new image m, err := images.Find(id) if err != nil { context.Logf("#error Error creating image,%s", err) } return router.Redirect(context, m.URLShow()) }
// HandleCreate handles the POST of the create form for files func HandleCreate(context router.Context) error { // Do not perform auth on posts - we could check a shared secret here or similar but that is not secure // better to require siging of posts by users with their own key to confirm identity if we wanted to check submissions. // Parse multipart first - must fix this to do it automatically fileParams, err := context.ParamFiles("file") if err != nil || len(fileParams) < 1 { return router.InternalError(err, "Invalid file", "Sorry, the file upload failed.") } fh := fileParams[0] context.Logf("#info FILE RECD:%v", fh.Filename) // Now extract other params params, err := context.Params() if err != nil { return router.InternalError(err) } // First find the username, if we have no user, reject post //context.Logf("PARAMS:%v", params) // PARAMS:map[sender:[Kenny Grant] recipient:[testtest]] // Check for user with name recipient // Find the user user, err := users.FindName(context.Param("recipient")) if err != nil || user == nil { return router.NotFoundError(err, "User not found", "Sorry this user doesn't exist") } // link with the named recipient user params.SetInt("user_id", user.Id) context.Logf("PARAMS:%v", params) // Ideally perform some identity check on the sender here, and set sender id if we have a user? // Perhaps require sending pgp sig of data? // We only consider the first file id, err := files.Create(params.Map(), fh) if err != nil { return router.InternalError(err) } // Log creation context.Logf("#info Created file id,%d", id) /* _, err := files.Find(id) if err != nil { return router.InternalError(err) } */ // Render a 200 response view := view.New(context) view.Layout("files/views/create.json.got") return view.Render() // return router.Redirect(context, m.URLIndex()) }