Skip to content

Commit

Permalink
(examples/fileshare) code cleanup
Browse files Browse the repository at this point in the history
	* user request context and pass context down
	* rename variables
  • Loading branch information
neculalaura committed Feb 11, 2024
1 parent 6d5537f commit d4c5e94
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 62 deletions.
40 changes: 23 additions & 17 deletions examples/fileshare/pkg/handlers/v1/files.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package v1

import (
"context"
"net/http"

"github.com/gin-gonic/gin"
"github.com/rs/xid"
"google.golang.org/protobuf/types/known/structpb"

sentium_grpc "github.com/sentium/examples/fileshare/pkg/pb/sentium/api/v1"
sentium "github.com/sentium/examples/fileshare/pkg/pb/sentium/api/v1"
)

type CreateFileRequest struct {
Expand Down Expand Up @@ -71,6 +70,8 @@ type ListFileUsersResponse struct {
}

func createFile(c *gin.Context) {
ctx := c.Request.Context()

// Read the request body
var request CreateFileRequest
if err := c.ShouldBindJSON(&request); err != nil {
Expand All @@ -94,7 +95,7 @@ func createFile(c *gin.Context) {
return
}

authzGrantRequest := sentium_grpc.AuthzGrantRequest{
authzGrantRequest := sentium.AuthzGrantRequest{
PrincipalId: c.GetHeader("user-id"),
ResourceId: resourceId,
ResourceType: "files",
Expand All @@ -108,7 +109,7 @@ func createFile(c *gin.Context) {
return
}

if _, err := authzClient.Grant(context.Background(), &authzGrantRequest); err != nil {
if _, err := authzClient.Grant(ctx, &authzGrantRequest); err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
}
Expand All @@ -126,6 +127,7 @@ func createFile(c *gin.Context) {
func deleteFile(c *gin.Context) {}

func getFile(c *gin.Context) {
ctx := c.Request.Context()
resourceId := c.Param("file")
userId := c.GetHeader("user-id")

Expand All @@ -136,13 +138,13 @@ func getFile(c *gin.Context) {
return
}

authzCheckRequest := sentium_grpc.AuthzCheckRequest{
authzCheckRequest := sentium.AuthzCheckRequest{
PrincipalId: userId,
ResourceId: resourceId,
ResourceType: "files",
}

authzCheckResponse, err := authzClient.Check(context.Background(), &authzCheckRequest)
authzCheckResponse, err := authzClient.Check(ctx, &authzCheckRequest)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
Expand All @@ -154,7 +156,7 @@ func getFile(c *gin.Context) {
}

// Get the file
resourcesListReq := sentium_grpc.ResourcesListRequest{
resourcesListReq := sentium.ResourcesListRequest{
PrincipalId: c.GetHeader("user-id"),
ResourceType: "files",
}
Expand All @@ -165,7 +167,7 @@ func getFile(c *gin.Context) {
return
}

resourcesListResp, err := resourcesClient.List(context.Background(), &resourcesListReq)
resourcesListResp, err := resourcesClient.List(ctx, &resourcesListReq)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
Expand Down Expand Up @@ -200,9 +202,11 @@ func getFile(c *gin.Context) {
}

func listFiles(c *gin.Context) {
ctx := c.Request.Context()

// Map request
paginationLimit, paginationToken := getPaginationParams(c)
resourcesListReq := sentium_grpc.ResourcesListRequest{
resourcesListReq := sentium.ResourcesListRequest{
PaginationLimit: paginationLimit,
PaginationToken: paginationToken,
PrincipalId: c.GetHeader("user-id"),
Expand All @@ -215,7 +219,7 @@ func listFiles(c *gin.Context) {
return
}

resourcesListResp, err := resourcesClient.List(context.Background(), &resourcesListReq)
resourcesListResp, err := resourcesClient.List(ctx, &resourcesListReq)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
Expand Down Expand Up @@ -247,12 +251,13 @@ func listFiles(c *gin.Context) {
}

func listFileUsers(c *gin.Context) {
ctx := c.Request.Context()
fileId := c.Param("file")
userId := c.GetHeader("user-id")
paginationLimit, paginationToken := getPaginationParams(c)

// Check requestor has access to file
role, err := getRole(userId, fileId)
role, err := getRole(ctx, userId, fileId)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
Expand All @@ -264,7 +269,7 @@ func listFileUsers(c *gin.Context) {
}

// Map request
listPrinipalsReq := sentium_grpc.ResourcesListPrincipalsRequest{
listPrinipalsReq := sentium.ResourcesListPrincipalsRequest{
ResourceId: fileId,
ResourceType: "files",
PaginationLimit: paginationLimit,
Expand All @@ -278,7 +283,7 @@ func listFileUsers(c *gin.Context) {
return
}

listPrincipalsResp, err := resourcesClient.ListPrincipals(context.Background(), &listPrinipalsReq)
listPrincipalsResp, err := resourcesClient.ListPrincipals(ctx, &listPrinipalsReq)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
Expand All @@ -299,7 +304,7 @@ func listFileUsers(c *gin.Context) {
continue
}

user, err := getUser(principal.Id)
user, err := getUser(ctx, principal.Id)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
Expand All @@ -317,6 +322,7 @@ func listFileUsers(c *gin.Context) {
}

func shareFile(c *gin.Context) {
ctx := c.Request.Context()
resourceId := c.Param("file")
userId := c.GetHeader("user-id")
var request ShareFileRequest
Expand All @@ -331,7 +337,7 @@ func shareFile(c *gin.Context) {
}

// Check requestor has access to shared resource
role, err := getRole(userId, resourceId)
role, err := getRole(ctx, userId, resourceId)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
Expand All @@ -349,13 +355,13 @@ func shareFile(c *gin.Context) {
}

// Share resource
authzGrantRequest := sentium_grpc.AuthzGrantRequest{
authzGrantRequest := sentium.AuthzGrantRequest{
PrincipalId: request.UserId,
ResourceId: resourceId,
ResourceType: "files",
}

if _, err := authzClient.Grant(context.Background(), &authzGrantRequest); err != nil {
if _, err := authzClient.Grant(ctx, &authzGrantRequest); err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
}
Expand Down
52 changes: 29 additions & 23 deletions examples/fileshare/pkg/handlers/v1/files_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package v1

import (
"context"
"encoding/json"
"fmt"
"io"
Expand All @@ -13,12 +14,13 @@ import (
)

func TestCreateFile(t *testing.T) {
ctx := context.Background()
router := gin.New()
router.POST("/files", createFile)

users, err := usersCreate(nil, 1)
users, err := usersCreate(ctx, nil, 1)
require.NoError(t, err)
defer usersDelete(users)
defer usersDelete(ctx, users)
headers := map[string]string{
"user-id": users[0].Id,
}
Expand Down Expand Up @@ -71,7 +73,7 @@ func TestCreateFile(t *testing.T) {

var file File
json.Unmarshal(respBody, &file)
defer filesDelete([]File{file}, headers["user-id"])
defer filesDelete(ctx, []File{file}, headers["user-id"])

expectedResp := File{
Id: file.Id,
Expand All @@ -84,18 +86,19 @@ func TestCreateFile(t *testing.T) {
}

func TestGetFile(t *testing.T) {
ctx := context.Background()
router := gin.New()
router.GET("/files/:file", getFile)

users, err := usersCreate(nil, 2)
users, err := usersCreate(ctx, nil, 2)
require.NoError(t, err)
defer usersDelete(users)
defer usersDelete(ctx, users)
userWithAccess := users[0]
userNoAccess := users[1]

files, err := filesCreate(1, userWithAccess.Id)
files, err := filesCreate(ctx, 1, userWithAccess.Id)
require.NoError(t, err)
defer filesDelete(files, userWithAccess.Id)
defer filesDelete(ctx, files, userWithAccess.Id)
fileId := files[0].Id

t.Run("FailNoAccess", func(t *testing.T) {
Expand Down Expand Up @@ -159,21 +162,22 @@ func TestGetFile(t *testing.T) {
}

func TestListFiles(t *testing.T) {
ctx := context.Background()
router := gin.New()
router.GET("/files", listFiles)

users, err := usersCreate(nil, 1)
users, err := usersCreate(ctx, nil, 1)
require.NoError(t, err)
defer usersDelete(users)
defer usersDelete(ctx, users)
userId := users[0].Id
headers := map[string]string{
"user-id": userId,
}

numFiles := 5
files, err := filesCreate(numFiles, userId)
files, err := filesCreate(ctx, numFiles, userId)
require.NoError(t, err)
defer filesDelete(files, userId)
defer filesDelete(ctx, files, userId)

t.Run("SuccessWithPaginationLimitNoToken", func(t *testing.T) {
path := fmt.Sprintf("/files?pagination_limit=%d", numFiles-1)
Expand Down Expand Up @@ -261,29 +265,30 @@ func TestListFiles(t *testing.T) {
}

func TestListFileUsers(t *testing.T) {
ctx := context.Background()
router := gin.New()
router.GET("/files/:file/users", listFileUsers)

// Create users
users, err := usersCreate(nil, 4)
users, err := usersCreate(ctx, nil, 4)
require.NoError(t, err)
defer usersDelete(users)
defer usersDelete(ctx, users)
owner := users[0]
editor := users[1]
viewer := users[2]
noAccessUser := users[3]

// Create files
files, err := filesCreate(1, owner.Id)
files, err := filesCreate(ctx, 1, owner.Id)
require.NoError(t, err)
defer filesDelete(files, owner.Id)
defer filesDelete(ctx, files, owner.Id)
file := files[0]

// Share files
err = filesShare(file, editor.Id, "editor")
err = filesShare(ctx, file, editor.Id, "editor")
require.NoError(t, err)

err = filesShare(file, viewer.Id, "viewer")
err = filesShare(ctx, file, viewer.Id, "viewer")
require.NoError(t, err)

usersWithAccess := []FileUser{
Expand Down Expand Up @@ -450,30 +455,31 @@ func TestListFileUsers(t *testing.T) {
}

func TestShareFile(t *testing.T) {
ctx := context.Background()
router := gin.New()
router.POST("/files/:file/users", shareFile)

// Create users
segment := xid.New().String()
users, err := usersCreate(&segment, 5)
users, err := usersCreate(ctx, &segment, 5)
require.NoError(t, err)
defer usersDelete(users)
defer usersDelete(ctx, users)
ownerId := users[0].Id
editorId := users[1].Id
viewerId := users[2].Id
noAccessUser := users[3].Id
shareeId := users[4].Id

// Create and share file with editor and viewer
files, err := filesCreate(1, ownerId)
files, err := filesCreate(ctx, 1, ownerId)
require.NoError(t, err)
file := files[0]
defer filesDelete(files, ownerId)
defer filesDelete(ctx, files, ownerId)

err = filesShare(file, editorId, "editor")
err = filesShare(ctx, file, editorId, "editor")
require.NoError(t, err)

err = filesShare(file, viewerId, "viewer")
err = filesShare(ctx, file, viewerId, "viewer")
require.NoError(t, err)

shareFileReq := ShareFileRequest{
Expand Down
Loading

0 comments on commit d4c5e94

Please sign in to comment.