// JSONTest is a testing page only, it will be removed when no longer needed. func JSONTest(c *gin.Context) { // user := auth.AuthenticatedUser(c) user := auth.User{ ID: 345, Username: "******", Email: "*****@*****.**", Active: true, Superuser: false, Groups: []auth.Group{ { ID: 1, Name: "Group 1", Permissions: []auth.Permission{ {ID: 1, Name: "user-create", Description: "Can create users"}, {ID: 2, Name: "user-update", Description: "Can update users"}, {ID: 3, Name: "user-delete", Description: "Can delete users"}, {ID: 4, Name: "user-read", Description: "Can read users"}, }, }, { ID: 2, Name: "Group 2", Permissions: []auth.Permission{ {ID: 4, Name: "user-read", Description: "Can read users"}, }, }, }, } json, _ := jsonapi.MarshalToJSON(user) c.Data(200, "application/vnd.api+json", json) }
//---------------------------------------------------------------------------- // GET /api/credentials //---------------------------------------------------------------------------- func credentialsIndex(c *gin.Context) { var credentials []Credential db.Find(&credentials) json, err := jsonapi.MarshalToJSON(credentials) if err != nil { c.String(500, "Internal Server Error:"+err.Error()) return } c.Data(200, "application/vnd.api+json", json) }
//---------------------------------------------------------------------------- // POST /api/credentials //---------------------------------------------------------------------------- func credentialsCreate(c *gin.Context) { var newCredential Credential if err := c.BindWith(&newCredential, JsonApiBinding{}); err != nil { fmt.Println(err) // TODO: Render JSON API error to client return } db.Create(&newCredential) json, err := jsonapi.MarshalToJSON(newCredential) if err != nil { c.String(500, "Internal Server Error:"+err.Error()) return } c.Data(201, CONTENT_TYPE, json) }
//----------------------------------------------------------------- // POST /api/user //----------------------------------------------------------------- func createUser(c *gin.Context) { var newUser User if err := c.BindWith(&newUser, JsonApiBinding{}); err != nil { fmt.Println(err) // TODO: Reender JSON API error to client return } newUser.hashPassword() db.Create(&newUser) json, err := jsonapi.MarshalToJSON(newUser) if err != nil { c.String(500, "Internal Server Error:"+err.Error()) return } c.Data(201, CONTENT_TYPE, json) }
//---------------------------------------------------------------------------- // PUT /api/credentials/:id //---------------------------------------------------------------------------- func credentialsUpdate(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { return } savedCredential := &Credential{ID: id} query := db.First(savedCredential) if query.Error != nil { if query.Error.Error() == "record not found" { c.String(404, "record not found") return } } var intermCredential Credential if err := c.BindWith(&intermCredential, JsonApiBinding{}); err != nil { fmt.Println(err) return } savedCredential.EncryptedBlobB64 = intermCredential.EncryptedBlobB64 query = db.Save(savedCredential) if query.Error != nil { fmt.Println(err) return } json, err := jsonapi.MarshalToJSON(savedCredential) if err != nil { fmt.Println(err) return } c.Data(200, "application/vnd.api+json", json) }
//---------------------------------------------------------------------------- // GET /api/credentials/:id //---------------------------------------------------------------------------- func credentialsShow(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { return } credential := &Credential{ID: id} query := db.First(credential) if query.Error != nil { if query.Error.Error() == "record not found" { c.String(404, "record not found") return } } json, err := jsonapi.MarshalToJSON(credential) if err != nil { c.String(500, "Internal Server Error:"+err.Error()) return } c.Data(200, "application/vnd.api+json", json) }
api *API rec *httptest.ResponseRecorder payload, payloadID SomeData ) BeforeEach(func() { api = NewAPI("v1") api.AddResource(SomeData{}, SomeResource{}) rec = httptest.NewRecorder() payloadID = SomeData{ID: "12345", Data: "A Brezzn"} payload = SomeData{Data: "A Brezzn"} }) Context("Create", func() { post := func(payload SomeData) { m, err := jsonapi.MarshalToJSON(payload) Expect(err).ToNot(HaveOccurred()) req, err := http.NewRequest("POST", "/v1/someDatas", strings.NewReader(string(m))) Expect(err).ToNot(HaveOccurred()) api.Handler().ServeHTTP(rec, req) } It("returns object with 201 created", func() { post(payload) Expect(rec.Code).To(Equal(http.StatusCreated)) var actual SomeData err := jsonapi.UnmarshalFromJSON(rec.Body.Bytes(), &actual) Expect(err).ToNot(HaveOccurred()) Expect(payloadID).To(Equal(actual)) })