Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions app/models/app_results.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,21 @@ type Buckets struct {
CreateTime string `json:"createtime"`
}

type ListMultipartUploadsResult struct {
Bucket string `json:"bucket"`
IsTruncated bool `json:"is_truncated"`
KeyMarker string `json:"key_marker"`
MaxUploads int `json:"max_uploads"`
Uploads []MultipartUpload `json:"uploads"`
}

type MultipartUpload struct {
Initiated string `json:"initiated"`
Key string `json:"object_key"`
StorageClass string `json:"storage_class"`
UploadId string `json:"upload_id"`
}

type Object struct {
Key string `json:"key"`
Size int64 `json:"size"`
Expand Down Expand Up @@ -71,3 +86,30 @@ type GetObjectVersionsResult struct {
Versions []ObjectVersioning `json:"versions"`
Err string `json:"err"`
}

type GetBucketAclResult struct {
Grants []Grant `json:"Grants"`
}

type Grant struct {
Permission string `json:"permission"`
Grantee Grantee `json:"Grantee"`
}

type Grantee struct {
Type string `json:"type"`
URI string `json:"uri"`
}

type GetBucketPolicyResult struct {
ID string `json:"id"`
Version string `json:"version"`
Statements []Statement `json:"statement"`
}

type Statement struct {
Effect string `json:"effect"`
Actions []Action `json:"action"`
}

type Action string
103 changes: 94 additions & 9 deletions app/s3cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package app
import (
"bytes"
"context"
"encoding/json"
"errors"
"github.com/wailsapp/wails/v2/pkg/runtime"
"io"
Expand All @@ -21,19 +22,19 @@ func (a *App) ListBuckets() ListBucketsResult {
res := ListBucketsResult{}
buckets, err := a.S3Client.ListBuckets()
if err != nil {
runtime.LogErrorf(a.ctx, "ListBuckets err: %s ", err)
res.Err = err.Error()
return res
}
for _, bucket := range buckets.Buckets{
b := Buckets{
Bucket: *bucket.Name,
CreateTime: (*bucket.CreationDate).Local().Format("2006-01-02 15:04:05"),
//CreateTime: (*bucket.CreationDate).String(),
if buckets != nil{
for _, bucket := range buckets.Buckets{
b := Buckets{
Bucket: *bucket.Name,
CreateTime: (*bucket.CreationDate).Local().Format("2006-01-02 15:04:05"),
}
res.Buckets = append(res.Buckets, b)
}
return res
}
res.Buckets = append(res.Buckets, b)
}
runtime.LogDebug(a.ctx, "ListBuckets success.")
return res
}

Expand Down Expand Up @@ -386,3 +387,87 @@ func (a *App) ListObjectVersions(bucketName string, key string) GetObjectVersion
}
return res
}

func (a *App) GetBucketAcl(bucketName string) GetBucketAclResult{
out, err := a.S3Client.GetBucketAcl(bucketName)
if err != nil{
runtime.LogErrorf(a.ctx, "getbucketacl faild: %s", bucketName)
}
res := GetBucketAclResult{}
for _, grant:=range out.Grants{
grant1 := Grant{
Permission: *grant.Permission,
Grantee: Grantee{
Type: *grant.Grantee.Type,
//URI: *grant.Grantee.URI,
},
}
res.Grants =append(res.Grants, grant1)
}
return res
}

func(a *App) SetBucketAcl(bucketName, acl string) string{
err := a.S3Client.SetBucketAcl(bucketName, acl)
if err != nil {
runtime.LogErrorf(a.ctx, "SetBucketACL %s err: %s ", bucketName, err)
return err.Error()
}
return ""
}

func(a *App) ListMultipartUploads(bucketName string)(out ListMultipartUploadsResult, err error){
res, err := a.S3Client.ListMultipartUploads(bucketName)
if err != nil{
return out, err
}
for _, upload := range res.Uploads{
upload1 := MultipartUpload{

@cxt90730 cxt90730 Apr 11, 2023

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

upload是指针么?如果是的话upload1没有必要,直接修改res的Uploads后返回

Initiated: (*upload.Initiated).Local().Format("2006-01-02 15:04:05"),
Key: *upload.Key,
StorageClass: *upload.StorageClass,
UploadId: *upload.UploadId,
}
out.Uploads = append(out.Uploads, upload1)
}
return out, nil
}

func(a *App) AbortMultipartUpload(bucketName, key, uploadid string)string{
err := a.S3Client.AbortMultiPartUpload(bucketName, key, uploadid)
if err!= nil{
return err.Error()
}
return ""
}

func(a *App) PutBucketPolicy(bucket, id, action string)string{
policy_e := `{
"Version": "2012-10-17",
"ID": "`+ id + `",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS":"*"},
"Action": ["s3:`+action+`"],
"Resource": [
"arn:aws:s3:::` + bucket + `/*"
]
}]
}`
err := a.S3Client.PutBucketPolicy(bucket, policy_e)
if err != nil {
return err.Error()
}
return ""
}

func(a *App) GetBucketPolicy(bucket string) (GetBucketPolicyResult, error) {
res := GetBucketPolicyResult{}
out, err := a.S3Client.GetBucketPolicy(bucket)
if err != nil{
return res, err}
var p GetBucketPolicyResult
err = json.Unmarshal([]byte(*out.Policy), &p)
return p, err
}

75 changes: 73 additions & 2 deletions app/s3lib/bucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,13 @@ type Bucket struct {
}

func (s3client *S3Client) ListBuckets() (buckets *s3.ListBucketsOutput, err error) {
//func (s3client *S3Client) ListBuckets() (bucketnames []string, err error) {
params := &s3.ListBucketsInput{}
out, err := s3client.Client.ListBuckets(params)
buckets, err = s3client.Client.ListBuckets(params)
if err != nil {
return nil, err
}
return out, nil
return buckets, nil
}

func (s3client *S3Client) ListObjects(bucketName, marker, prefix string, maxKeys int64, delemiter string) (*s3.ListObjectsOutput, error) {
Expand All @@ -86,3 +87,73 @@ func (s3client *S3Client) ListObjects(bucketName, marker, prefix string, maxKeys
}
return s3client.Client.ListObjects(params)
}

func (s3client *S3Client) GetBucketAcl(bucketname string)(*s3.GetBucketAclOutput, error){
params := &s3.GetBucketAclInput{
Bucket: aws.String(bucketname),
}
out, err := s3client.Client.GetBucketAcl(params)
return out, err
}

func (s3client *S3Client) SetBucketAcl(bucketname, acl string) (err error){
params := &s3.PutBucketAclInput{
Bucket: aws.String(bucketname),
ACL: aws.String(acl),
}
_, err = s3client.Client.PutBucketAcl(params)
return err
}

func (s3client *S3Client) SetBucketAclPolicy(bucketname string, acl *s3.AccessControlPolicy)(err error){
params := &s3.PutBucketAclInput{
Bucket: aws.String(bucketname),
AccessControlPolicy: acl,
}
_, err = s3client.Client.PutBucketAcl(params)
return err
}

func (s3client *S3Client) ListMultipartUploads(bucketname string) (ListMultiparts *s3.ListMultipartUploadsOutput, err error) {
params := &s3.ListMultipartUploadsInput{
Bucket: aws.String(bucketname),
}

out, err :=s3client.Client.ListMultipartUploads(params)
if err != nil{
return nil, err
}
return out, nil
}

func (s3client *S3Client) AbortMultipartUpload(bucketname, key, uploadid string) string{
params := &s3.AbortMultipartUploadInput{
Bucket: aws.String(bucketname),
Key: aws.String(key),
UploadId: aws.String(uploadid),
}
_, err := s3client.Client.AbortMultipartUpload(params)
if err != nil{
return err.Error()
}
return ""
}

func (s3client *S3Client) PutBucketPolicy(bucketname, policy string) error{
params := &s3.PutBucketPolicyInput{
Bucket: aws.String(bucketname),
Policy: aws.String(policy),
}
_, err := s3client.Client.PutBucketPolicy(params)
if err != nil{
return err
}
return nil
}

func (s3client *S3Client) GetBucketPolicy(bucketname string)(*s3.GetBucketPolicyOutput, error){
params := &s3.GetBucketPolicyInput{
Bucket: aws.String(bucketname)}
out, err := s3client.Client.GetBucketPolicy(params)
return out, err
}
Loading