aboutsummaryrefslogtreecommitdiff
path: root/website.go
diff options
context:
space:
mode:
Diffstat (limited to 'website.go')
-rw-r--r--website.go46
1 files changed, 37 insertions, 9 deletions
diff --git a/website.go b/website.go
index cdfae89..ae4ffff 100644
--- a/website.go
+++ b/website.go
@@ -18,7 +18,8 @@ var (
ErrBucketDeleteNotEmpty = fmt.Errorf("You must remove all the files before deleting a bucket")
ErrBucketDeleteUnfinishedUpload = fmt.Errorf("You must remove all the unfinished multipart uploads before deleting a bucket")
ErrCantChangeVhost = fmt.Errorf("Can't change the vhost to the desired value. Maybe it's already used by someone else or an internal error occured")
- ErrCantRemoveOldVhost = fmt.Errorf("The new vhost is bound to the bucket but the old one can't be removed, this is an internal error")
+ ErrCantRemoveOldVhost = fmt.Errorf("The new vhost is bound to the bucket but the old one can't be removed, it's an internal error")
+ ErrFetchDedicatedKey = fmt.Errorf("Bucket has no dedicated key while it's required, it's an internal error")
)
type WebsiteId struct {
@@ -91,10 +92,12 @@ func (w *WebsiteController) Describe() (*WebsiteDescribe, error) {
for _, k := range w.PrettyList {
r = append(r, w.WebsiteIdx[k])
}
+
return &WebsiteDescribe{
&w.WebsiteCount,
w.User.Quota.WebsiteSizeBurstedPretty(),
- r}, nil
+ r,
+ }, nil
}
func (w *WebsiteController) Inspect(pretty string) (*WebsiteView, error) {
@@ -108,7 +111,9 @@ func (w *WebsiteController) Inspect(pretty string) (*WebsiteView, error) {
return nil, ErrFetchBucketInfo
}
- return NewWebsiteView(binfo), nil
+ // @TODO: fetch the associated key
+
+ return NewWebsiteView(binfo, nil)
}
func (w *WebsiteController) Patch(pretty string, patch *WebsitePatch) (*WebsiteView, error) {
@@ -152,7 +157,11 @@ func (w *WebsiteController) Patch(pretty string, patch *WebsitePatch) (*WebsiteV
}
}
- return NewWebsiteView(binfo), nil
+ if patch.RotateKey != nil && *patch.RotateKey {
+ // @TODO: rotate key
+ }
+
+ return NewWebsiteView(binfo, nil)
}
func (w *WebsiteController) Create(pretty string) (*WebsiteView, error) {
@@ -164,11 +173,13 @@ func (w *WebsiteController) Create(pretty string) (*WebsiteView, error) {
return nil, ErrWebsiteQuotaReached
}
+ // Create bucket
binfo, err := grgCreateBucket(pretty)
if err != nil {
return nil, ErrCantCreateBucket
}
+ // Allow user's global key on bucket
s3key, err := w.User.S3KeyInfo()
if err != nil {
return nil, err
@@ -179,6 +190,7 @@ func (w *WebsiteController) Create(pretty string) (*WebsiteView, error) {
return nil, ErrCantAllowKey
}
+ // Set quota
qr := w.User.Quota.DefaultWebsiteQuota()
wr := allowWebsiteDefault()
@@ -191,7 +203,10 @@ func (w *WebsiteController) Create(pretty string) (*WebsiteView, error) {
return nil, ErrCantConfigureBucket
}
- return NewWebsiteView(binfo), nil
+ // Create a dedicated key
+ // @TODO
+
+ return NewWebsiteView(binfo, nil)
}
func (w *WebsiteController) Delete(pretty string) error {
@@ -204,6 +219,7 @@ func (w *WebsiteController) Delete(pretty string) error {
return ErrWebsiteNotFound
}
+ // Error checking
binfo, err := grgGetBucket(website.Internal)
if err != nil {
return ErrFetchBucketInfo
@@ -217,6 +233,10 @@ func (w *WebsiteController) Delete(pretty string) error {
return ErrBucketDeleteUnfinishedUpload
}
+ // Delete dedicated key
+ // @TODO
+
+ // Actually delete bucket
err = grgDeleteBucket(website.Internal)
return err
}
@@ -229,7 +249,14 @@ type WebsiteView struct {
Files QuotaStat `json:"quota_files"`
}
-func NewWebsiteView(binfo *garage.BucketInfo) *WebsiteView {
+func NewWebsiteView(binfo *garage.BucketInfo, s3key *garage.KeyInfo) (*WebsiteView, error) {
+ if binfo == nil {
+ return nil, ErrFetchBucketInfo
+ }
+ if s3key == nil {
+ return nil, ErrFetchDedicatedKey
+ }
+
q := binfo.GetQuotas()
wid := NewWebsiteIdFromBucketInfo(binfo)
@@ -237,14 +264,15 @@ func NewWebsiteView(binfo *garage.BucketInfo) *WebsiteView {
objects := NewQuotaStat(*binfo.Objects, (&q).GetMaxObjects(), false)
return &WebsiteView{
wid,
- "not yet implemented",
- "not yet implemented",
+ *s3key.AccessKeyId,
+ *s3key.SecretAccessKey.Get(),
size,
objects,
- }
+ }, nil
}
type WebsitePatch struct {
Size *int64 `json:"quota_size"`
Vhost *string `json:"vhost"`
+ RotateKey *bool `json:"rotate_key"`
}