Skip to content

Commit ca3f471

Browse files
authored
Remove relationship create/delete handlers (#174)
* Remove relationship create/delete handlers NATS is the interface being used for relationship management now. relationshipCreate and relationshipDelete are redundant and also hard to make secure, since this part of the API is more of a management of the SpiceDB graph itself instead of management of resources that are on the SpiceDB graph. This commit removes both of them and their respective API routes. Signed-off-by: John Schaeffer <[email protected]> * Remove unused types and functions Signed-off-by: John Schaeffer <[email protected]> --------- Signed-off-by: John Schaeffer <[email protected]>
1 parent 92f3aa8 commit ca3f471

File tree

3 files changed

+0
-152
lines changed

3 files changed

+0
-152
lines changed

internal/api/relationships.go

Lines changed: 0 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -3,89 +3,12 @@ package api
33
import (
44
"net/http"
55

6-
"go.infratographer.com/permissions-api/internal/types"
7-
86
"github.com/labstack/echo/v4"
97
"go.infratographer.com/x/gidx"
108
"go.opentelemetry.io/otel/attribute"
119
"go.opentelemetry.io/otel/trace"
1210
)
1311

14-
func (r *Router) buildRelationship(resource types.Resource, item createRelationshipItem) (types.Relationship, error) {
15-
itemID, err := gidx.Parse(item.SubjectID)
16-
if err != nil {
17-
return types.Relationship{}, err
18-
}
19-
20-
itemResource, err := r.engine.NewResourceFromID(itemID)
21-
if err != nil {
22-
return types.Relationship{}, err
23-
}
24-
25-
out := types.Relationship{
26-
Subject: itemResource,
27-
Relation: item.Relation,
28-
Resource: resource,
29-
}
30-
31-
return out, nil
32-
}
33-
34-
func (r *Router) buildRelationships(subjResource types.Resource, items []createRelationshipItem) ([]types.Relationship, error) {
35-
out := make([]types.Relationship, len(items))
36-
37-
for i, item := range items {
38-
rel, err := r.buildRelationship(subjResource, item)
39-
if err != nil {
40-
return nil, err
41-
}
42-
43-
out[i] = rel
44-
}
45-
46-
return out, nil
47-
}
48-
49-
func (r *Router) relationshipsCreate(c echo.Context) error {
50-
resourceIDStr := c.Param("id")
51-
52-
ctx, span := tracer.Start(c.Request().Context(), "api.relationshipsCreate", trace.WithAttributes(attribute.String("id", resourceIDStr)))
53-
defer span.End()
54-
55-
resourceID, err := gidx.Parse(resourceIDStr)
56-
if err != nil {
57-
return echo.NewHTTPError(http.StatusBadRequest, "error parsing resource ID").SetInternal(err)
58-
}
59-
60-
var reqBody createRelationshipsRequest
61-
62-
err = c.Bind(&reqBody)
63-
if err != nil {
64-
return echo.NewHTTPError(http.StatusBadRequest, "error parsing request body").SetInternal(err)
65-
}
66-
67-
resource, err := r.engine.NewResourceFromID(resourceID)
68-
if err != nil {
69-
return echo.NewHTTPError(http.StatusBadRequest, "error creating relationships").SetInternal(err)
70-
}
71-
72-
rels, err := r.buildRelationships(resource, reqBody.Relationships)
73-
if err != nil {
74-
return echo.NewHTTPError(http.StatusBadRequest, "error creating relationships").SetInternal(err)
75-
}
76-
77-
_, err = r.engine.CreateRelationships(ctx, rels)
78-
if err != nil {
79-
return echo.NewHTTPError(http.StatusInternalServerError, "error creating relationships").SetInternal(err)
80-
}
81-
82-
resp := createRelationshipsResponse{
83-
Success: true,
84-
}
85-
86-
return c.JSON(http.StatusCreated, resp)
87-
}
88-
8912
func (r *Router) relationshipListFrom(c echo.Context) error {
9013
resourceIDStr := c.Param("id")
9114

@@ -159,54 +82,3 @@ func (r *Router) relationshipListTo(c echo.Context) error {
15982

16083
return c.JSON(http.StatusOK, out)
16184
}
162-
163-
func (r *Router) relationshipDelete(c echo.Context) error {
164-
resourceIDStr := c.Param("id")
165-
166-
ctx, span := tracer.Start(c.Request().Context(), "api.relationshipsDelete", trace.WithAttributes(attribute.String("id", resourceIDStr)))
167-
defer span.End()
168-
169-
resourceID, err := gidx.Parse(resourceIDStr)
170-
if err != nil {
171-
return echo.NewHTTPError(http.StatusBadRequest, "error parsing resource ID").SetInternal(err)
172-
}
173-
174-
var reqBody deleteRelationshipRequest
175-
176-
err = c.Bind(&reqBody)
177-
if err != nil {
178-
return echo.NewHTTPError(http.StatusBadRequest, "error parsing request body").SetInternal(err)
179-
}
180-
181-
resource, err := r.engine.NewResourceFromID(resourceID)
182-
if err != nil {
183-
return echo.NewHTTPError(http.StatusBadRequest, "error deleting relationship").SetInternal(err)
184-
}
185-
186-
relatedResourceID, err := gidx.Parse(reqBody.SubjectID)
187-
if err != nil {
188-
return echo.NewHTTPError(http.StatusBadRequest, "error deleting relationship").SetInternal(err)
189-
}
190-
191-
relatedResource, err := r.engine.NewResourceFromID(relatedResourceID)
192-
if err != nil {
193-
return echo.NewHTTPError(http.StatusBadRequest, "error deleting relationship").SetInternal(err)
194-
}
195-
196-
relationship := types.Relationship{
197-
Resource: resource,
198-
Relation: reqBody.Relation,
199-
Subject: relatedResource,
200-
}
201-
202-
_, err = r.engine.DeleteRelationships(ctx, relationship)
203-
if err != nil {
204-
return echo.NewHTTPError(http.StatusInternalServerError, "error deleting relationship").SetInternal(err)
205-
}
206-
207-
resp := deleteRelationshipsResponse{
208-
Success: true,
209-
}
210-
211-
return c.JSON(http.StatusOK, resp)
212-
}

internal/api/router.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ func (r *Router) Routes(rg *echo.Group) {
5656

5757
v1.POST("/resources/:id/roles", r.roleCreate)
5858
v1.GET("/resources/:id/roles", r.rolesList)
59-
v1.POST("/resources/:id/relationships", r.relationshipsCreate)
60-
v1.DELETE("/resources/:id/relationships", r.relationshipDelete)
6159
v1.GET("/resources/:id/relationships", r.relationshipListFrom)
6260
v1.GET("/relationships/from/:id", r.relationshipListFrom)
6361
v1.GET("/relationships/to/:id", r.relationshipListTo)

internal/api/types.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,6 @@ type listRolesResponse struct {
2525
Data []roleResponse `json:"data"`
2626
}
2727

28-
type createRelationshipItem struct {
29-
Relation string `json:"relation" binding:"required"`
30-
SubjectID string `json:"subject_id" binding:"required"`
31-
}
32-
33-
type createRelationshipsRequest struct {
34-
Relationships []createRelationshipItem `json:"relationships" binding:"required"`
35-
}
36-
37-
type createRelationshipsResponse struct {
38-
Success bool `json:"success"`
39-
}
40-
41-
type deleteRelationshipRequest struct {
42-
Relation string `json:"relation" binding:"required"`
43-
SubjectID string `json:"subject_id" binding:"required"`
44-
}
45-
46-
type deleteRelationshipsResponse struct {
47-
Success bool `json:"success"`
48-
}
49-
5028
type relationshipItem struct {
5129
ResourceID string `json:"resource_id,omitempty"`
5230
Relation string `json:"relation"`

0 commit comments

Comments
 (0)