Skip to content

Commit

Permalink
fakeサーバ実装: Bucket & Permission (#17)
Browse files Browse the repository at this point in the history
- Bucketのgin部分の実装追加
- Permission関連APIの実装
  • Loading branch information
yamamoto-febc authored Mar 2, 2022
1 parent 3452e63 commit 9753b9e
Show file tree
Hide file tree
Showing 14 changed files with 695 additions and 138 deletions.
13 changes: 12 additions & 1 deletion apis/v1/example_fake_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,12 @@ func init() {
}

func initFakeServer() {
siteId := "isk01"
fakeServer := &server.Server{
Engine: &fake.Engine{
Clusters: []*v1.Cluster{
{
Id: "isk01",
Id: siteId,

ControlPanelUrl: "https://secure.sakura.ad.jp/objectstorage/",
DislpayNameEnUs: "Ishikari Site #1",
Expand All @@ -47,6 +48,16 @@ func initFakeServer() {
CreatedAt: v1.CreatedAt(time.Now()),
ResourceId: "100000000001",
},
Buckets: []*v1.Bucket{
{
ClusterId: siteId,
Name: "bucket1",
},
{
ClusterId: siteId,
Name: "bucket2",
},
},
},
}
sv := httptest.NewServer(fakeServer.Handler())
Expand Down
122 changes: 122 additions & 0 deletions apis/v1/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,125 @@ func Example_siteAccountKeys() {
// output:
// secret
}

// Example_bucket バケット操作
func Example_bucket() {
token := os.Getenv("SAKURACLOUD_ACCESS_TOKEN")
secret := os.Getenv("SAKURACLOUD_ACCESS_TOKEN_SECRET")

client, err := v1.NewClientWithResponses(serverURL, func(c *v1.Client) error {
c.RequestEditors = []v1.RequestEditorFn{
v1.OjsAuthInterceptor(token, secret),
}
return nil
})
if err != nil {
panic(err)
}

// サイトIDが必要になるためまずサイト一覧を取得
sitesResp, err := client.ListClustersWithResponse(context.Background())
if err != nil {
panic(err)
}

sites, err := sitesResp.Result()
if err != nil {
panic(err)
}
siteId := sites.Data[0].Id

// バケット作成
createParams := v1.CreateBucketJSONRequestBody{
ClusterId: siteId,
}

bucketResp, err := client.CreateBucketWithResponse(context.Background(), "bucket-name", createParams)
if err != nil {
panic(err)
}

bucket, err := bucketResp.Result()
if err != nil {
panic(err)
}

defer func() {
deleteParams := v1.DeleteBucketJSONRequestBody{
ClusterId: siteId,
}
resp, err := client.DeleteBucketWithResponse(context.Background(), "bucket-name", deleteParams)
if err != nil {
panic(err)
}
if err := resp.Result(); err != nil {
panic(err)
}
}()

fmt.Println(bucket.Data.Name)
// output:
// bucket-name
}

// Example_permissions パーミッション操作の例
func Example_permissions() {
token := os.Getenv("SAKURACLOUD_ACCESS_TOKEN")
secret := os.Getenv("SAKURACLOUD_ACCESS_TOKEN_SECRET")

client, err := v1.NewClientWithResponses(serverURL, func(c *v1.Client) error {
c.RequestEditors = []v1.RequestEditorFn{
v1.OjsAuthInterceptor(token, secret),
}
return nil
})
if err != nil {
panic(err)
}

// サイトIDが必要になるためまずサイト一覧を取得
sitesResp, err := client.ListClustersWithResponse(context.Background())
if err != nil {
panic(err)
}

sites, err := sitesResp.Result()
if err != nil {
panic(err)
}
siteId := sites.Data[0].Id

// パーミッション作成
permissionResp, err := client.CreatePermissionWithResponse(context.Background(), siteId, v1.CreatePermissionJSONRequestBody{
BucketControls: v1.BucketControls{
{
BucketName: "bucket1",
CanRead: true,
CanWrite: true,
},
},
DisplayName: "foobar",
})
if err != nil {
panic(err)
}

permission, err := permissionResp.Result()
if err != nil {
panic(err)
}

defer func() {
resp, err := client.DeletePermissionWithResponse(context.Background(), siteId, permission.Data.Id.String())
if err != nil {
panic(err)
}
if err := resp.Result(); err != nil {
panic(err)
}
}()

fmt.Println(permission.Data.DisplayName)
// output:
// foobar
}
131 changes: 85 additions & 46 deletions apis/v1/spec/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -840,7 +840,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/Permission'
$ref: '#/components/schemas/PermissionsResponseBody'
'401':
description: 認証に失敗しました
content:
Expand Down Expand Up @@ -880,14 +880,14 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/PermissionBucketControlsBody'
$ref: '#/components/schemas/PermissionRequestBody'
responses:
'201':
description: パーミッションの作成に成功しました
content:
application/json:
schema:
$ref: '#/components/schemas/Permission'
$ref: '#/components/schemas/PermissionResponseBody'
'401':
description: 認証に失敗しました
content:
Expand Down Expand Up @@ -946,7 +946,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/Permission'
$ref: '#/components/schemas/PermissionResponseBody'
'401':
description: 認証に失敗しました
content:
Expand Down Expand Up @@ -1054,14 +1054,14 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/PermissionBucketControlsBody'
$ref: '#/components/schemas/PermissionRequestBody'
responses:
'200':
description: パーミッションの更新に成功しました
content:
application/json:
schema:
$ref: '#/components/schemas/Permission'
$ref: '#/components/schemas/PermissionResponseBody'
'401':
description: 認証に失敗しました
content:
Expand Down Expand Up @@ -1470,6 +1470,22 @@ components:
required:
- data

# Note: PermissionsとPermissionに分離
PermissionsResponseBody:
type: object
properties:
data:
$ref: '#/components/schemas/Permissions'
required:
- data
PermissionResponseBody:
type: object
properties:
data:
$ref: '#/components/schemas/Permission'
required:
- data

# Note: model.Bucketからリネーム
Bucket:
type: object
Expand Down Expand Up @@ -1662,20 +1678,33 @@ components:
- id
- secret
- created_at

# Note: BucketControlsとBucketControlに分離
BucketControls:
description: Bucket controls
type: array
items:
type: object
properties:
bucket_name:
$ref: '#/components/schemas/BucketName'
can_read:
$ref: '#/components/schemas/CanRead'
can_write:
$ref: '#/components/schemas/CanWrite'
created_at:
$ref: '#/components/schemas/CreatedAt'
$ref: '#/components/schemas/BucketControl'

# Note: BucketControlsとBucketControlに分離
BucketControl:
description: Bucket control
type: object
properties:
bucket_name:
$ref: '#/components/schemas/BucketName'
can_read:
$ref: '#/components/schemas/CanRead'
can_write:
$ref: '#/components/schemas/CanWrite'
created_at:
$ref: '#/components/schemas/CreatedAt'
required:
- bucket_name
- can_read
- can_write
- created_at

PermissionSecret:
description: Permission secret key
type: string
Expand All @@ -1686,6 +1715,7 @@ components:
# type: string
# pattern: '^[\w\d_-]+$'
# example: grantfullControl

# Note: ResponseBody+Accountに分離させた
Account:
description: Account info
Expand All @@ -1701,6 +1731,7 @@ components:
- resource_id
- code
- created_at

# BucketGrantRead:
# description: Bucket Grant Read
# type: boolean
Expand Down Expand Up @@ -1808,38 +1839,44 @@ components:
# permission:
# type: string
# example: permission

# Note: Permissions/Permission/Permission[s]ResponseBodyに分離
Permissions:
description: Permissions
type: array
items:
$ref: '#/components/schemas/Permission'

# Note: Permissions/Permission/Permission[s]ResponseBodyに分離
Permission:
description: Permission
type: object
properties:
data:
description: data type
type: array
items:
type: object
properties:
id:
allOf:
- $ref: '#/components/schemas/PermissionID'
display_name:
allOf:
- $ref: '#/components/schemas/DisplayName'
bucket_controls:
allOf:
- $ref: '#/components/schemas/BucketControls'
created_at:
allOf:
- $ref: '#/components/schemas/CreatedAt'
PermissionBucketControlsBody:
id:
$ref: '#/components/schemas/PermissionID'
display_name:
$ref: '#/components/schemas/DisplayName'
bucket_controls:
$ref: '#/components/schemas/BucketControls'
created_at:
$ref: '#/components/schemas/CreatedAt'
required:
- id
- display_name
- bucket_controls
- created_at

# Note: PermissionBucketControlsBodyからリネーム
PermissionRequestBody:
description: Request body for bucket controls for Permission
type: object
properties:
display_name:
allOf:
- $ref: '#/components/schemas/DisplayName'
$ref: '#/components/schemas/DisplayName'
bucket_controls:
allOf:
- $ref: '#/components/schemas/BucketControls'
$ref: '#/components/schemas/BucketControls'
required:
- display_name
- bucket_controls
PermissionKey:
description: Permission Key
type: object
Expand All @@ -1849,14 +1886,16 @@ components:
type: object
properties:
id:
allOf:
- $ref: '#/components/schemas/PermissionID'
$ref: '#/components/schemas/PermissionID'
secret:
allOf:
- $ref: '#/components/schemas/PermissionSecret'
$ref: '#/components/schemas/PermissionSecret'
created_at:
allOf:
- $ref: '#/components/schemas/CreatedAt'
$ref: '#/components/schemas/CreatedAt'
required:
- id
- secret
- created_at

# Session:
# description: Session
# type: object
Expand Down
Loading

0 comments on commit 9753b9e

Please sign in to comment.