aboutsummaryrefslogtreecommitdiff
path: root/garage.go
diff options
context:
space:
mode:
authorQuentin <quentin@dufour.io>2024-06-24 10:15:56 +0000
committerQuentin <quentin@dufour.io>2024-06-24 10:15:56 +0000
commit9917429da3b06462969b41d511ad4daf27eaf197 (patch)
tree1a27c40a1ff9123b5552769fcf3cbb543d8dc959 /garage.go
parente7e05ed929c92c2b9d193f8193878c1a8a74c43c (diff)
parentbc7bc61f7449b1f41ed9eb46388ab0c149856f96 (diff)
downloadguichet-9917429da3b06462969b41d511ad4daf27eaf197.tar.gz
guichet-9917429da3b06462969b41d511ad4daf27eaf197.zip
Merge pull request 'per-bucket keys' (#68) from feat-per-bucket-key into mainmain
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/guichet/pulls/68
Diffstat (limited to 'garage.go')
-rw-r--r--garage.go220
1 files changed, 31 insertions, 189 deletions
diff --git a/garage.go b/garage.go
index 7cd879b..44b8dae 100644
--- a/garage.go
+++ b/garage.go
@@ -4,10 +4,7 @@ import (
"context"
"fmt"
garage "git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-golang"
- "github.com/gorilla/mux"
"log"
- "net/http"
- "strings"
)
func gadmin() (*garage.APIClient, context.Context) {
@@ -26,8 +23,9 @@ func gadmin() (*garage.APIClient, context.Context) {
func grgCreateKey(name string) (*garage.KeyInfo, error) {
client, ctx := gadmin()
- kr := garage.AddKeyRequest{Name: &name}
- resp, _, err := client.KeyApi.AddKey(ctx).AddKeyRequest(kr).Execute()
+ kr := garage.NewAddKeyRequest()
+ kr.SetName(name)
+ resp, _, err := client.KeyApi.AddKey(ctx).AddKeyRequest(*kr).Execute()
if err != nil {
fmt.Printf("%+v\n", err)
return nil, err
@@ -38,7 +36,7 @@ func grgCreateKey(name string) (*garage.KeyInfo, error) {
func grgGetKey(accessKey string) (*garage.KeyInfo, error) {
client, ctx := gadmin()
- resp, _, err := client.KeyApi.GetKey(ctx, accessKey).Execute()
+ resp, _, err := client.KeyApi.GetKey(ctx).Id(accessKey).ShowSecretKey("true").Execute()
if err != nil {
fmt.Printf("%+v\n", err)
return nil, err
@@ -46,6 +44,28 @@ func grgGetKey(accessKey string) (*garage.KeyInfo, error) {
return resp, nil
}
+func grgSearchKey(name string) (*garage.KeyInfo, error) {
+ client, ctx := gadmin()
+
+ resp, _, err := client.KeyApi.GetKey(ctx).Search(name).ShowSecretKey("true").Execute()
+ if err != nil {
+ fmt.Printf("%+v\n", err)
+ return nil, err
+ }
+ return resp, nil
+}
+
+func grgDelKey(accessKey string) error {
+ client, ctx := gadmin()
+
+ _, err := client.KeyApi.DeleteKey(ctx).Id(accessKey).Execute()
+ if err != nil {
+ fmt.Printf("%+v\n", err)
+ return err
+ }
+ return nil
+}
+
func grgCreateBucket(bucket string) (*garage.BucketInfo, error) {
client, ctx := gadmin()
@@ -61,14 +81,14 @@ func grgCreateBucket(bucket string) (*garage.BucketInfo, error) {
return binfo, nil
}
-func grgAllowKeyOnBucket(bid, gkey string) (*garage.BucketInfo, error) {
+func grgAllowKeyOnBucket(bid, gkey string, read, write, owner bool) (*garage.BucketInfo, error) {
client, ctx := gadmin()
// Allow user's key
ar := garage.AllowBucketKeyRequest{
BucketId: bid,
AccessKeyId: gkey,
- Permissions: *garage.NewAllowBucketKeyRequestPermissions(true, true, true),
+ Permissions: *garage.NewAllowBucketKeyRequestPermissions(read, write, owner),
}
binfo, _, err := client.BucketApi.AllowBucketKey(ctx).AllowBucketKeyRequest(ar).Execute()
if err != nil {
@@ -91,7 +111,7 @@ func allowWebsiteDefault() *garage.UpdateBucketRequestWebsiteAccess {
func grgUpdateBucket(bid string, ur *garage.UpdateBucketRequest) (*garage.BucketInfo, error) {
client, ctx := gadmin()
- binfo, _, err := client.BucketApi.UpdateBucket(ctx, bid).UpdateBucketRequest(*ur).Execute()
+ binfo, _, err := client.BucketApi.UpdateBucket(ctx).Id(bid).UpdateBucketRequest(*ur).Execute()
if err != nil {
fmt.Printf("%+v\n", err)
return nil, err
@@ -148,7 +168,7 @@ func grgDelLocalAlias(bid, key, alias string) (*garage.BucketInfo, error) {
func grgGetBucket(bid string) (*garage.BucketInfo, error) {
client, ctx := gadmin()
- resp, _, err := client.BucketApi.GetBucketInfo(ctx, bid).Execute()
+ resp, _, err := client.BucketApi.GetBucketInfo(ctx).Id(bid).Execute()
if err != nil {
log.Println(err)
return nil, err
@@ -160,187 +180,9 @@ func grgGetBucket(bid string) (*garage.BucketInfo, error) {
func grgDeleteBucket(bid string) error {
client, ctx := gadmin()
- _, err := client.BucketApi.DeleteBucket(ctx, bid).Execute()
+ _, err := client.BucketApi.DeleteBucket(ctx).Id(bid).Execute()
if err != nil {
log.Println(err)
}
return err
}
-
-// --- Start page rendering functions
-
-func handleWebsiteConfigure(w http.ResponseWriter, r *http.Request) {
- user := RequireUserHtml(w, r)
- if user == nil {
- return
- }
-
- tKey := getTemplate("garage_key.html")
- tKey.Execute(w, user)
-}
-
-func handleWebsiteList(w http.ResponseWriter, r *http.Request) {
- user := RequireUserHtml(w, r)
- if user == nil {
- return
- }
-
- ctrl, err := NewWebsiteController(user)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- if len(ctrl.PrettyList) > 0 {
- http.Redirect(w, r, "/website/inspect/"+ctrl.PrettyList[0], http.StatusFound)
- } else {
- http.Redirect(w, r, "/website/new", http.StatusFound)
- }
-}
-
-type WebsiteNewTpl struct {
- Ctrl *WebsiteController
- Err error
-}
-
-func handleWebsiteNew(w http.ResponseWriter, r *http.Request) {
- user := RequireUserHtml(w, r)
- if user == nil {
- return
- }
-
- ctrl, err := NewWebsiteController(user)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- tpl := &WebsiteNewTpl{ctrl, nil}
-
- tWebsiteNew := getTemplate("garage_website_new.html")
- if r.Method == "POST" {
- r.ParseForm()
-
- bucket := strings.Join(r.Form["bucket"], "")
- if bucket == "" {
- bucket = strings.Join(r.Form["bucket2"], "")
- }
-
- view, err := ctrl.Create(bucket)
- if err != nil {
- tpl.Err = err
- tWebsiteNew.Execute(w, tpl)
- return
- }
-
- http.Redirect(w, r, "/website/inspect/"+view.Name.Pretty, http.StatusFound)
- return
- }
-
- tWebsiteNew.Execute(w, tpl)
-}
-
-type WebsiteInspectTpl struct {
- Describe *WebsiteDescribe
- View *WebsiteView
- Err error
-}
-
-func handleWebsiteInspect(w http.ResponseWriter, r *http.Request) {
- var processErr error
-
- user := RequireUserHtml(w, r)
- if user == nil {
- return
- }
-
- ctrl, err := NewWebsiteController(user)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- bucketName := mux.Vars(r)["bucket"]
-
- if r.Method == "POST" {
- r.ParseForm()
- action := strings.Join(r.Form["action"], "")
- switch action {
- case "increase_quota":
- _, processErr = ctrl.Patch(bucketName, &WebsitePatch{Size: &user.Quota.WebsiteSizeBursted})
- case "delete_bucket":
- processErr = ctrl.Delete(bucketName)
- if processErr == nil {
- http.Redirect(w, r, "/website", http.StatusFound)
- }
- default:
- processErr = fmt.Errorf("Unknown action")
- }
-
- }
-
- view, err := ctrl.Inspect(bucketName)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- describe, err := ctrl.Describe()
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- tpl := &WebsiteInspectTpl{describe, view, processErr}
-
- tWebsiteInspect := getTemplate("garage_website_inspect.html")
- tWebsiteInspect.Execute(w, &tpl)
-}
-
-func handleWebsiteVhost(w http.ResponseWriter, r *http.Request) {
- var processErr error
-
- user := RequireUserHtml(w, r)
- if user == nil {
- return
- }
-
- ctrl, err := NewWebsiteController(user)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- bucketName := mux.Vars(r)["bucket"]
-
- if r.Method == "POST" {
- r.ParseForm()
-
- bucket := strings.Join(r.Form["bucket"], "")
- if bucket == "" {
- bucket = strings.Join(r.Form["bucket2"], "")
- }
-
- view, processErr := ctrl.Patch(bucketName, &WebsitePatch{Vhost: &bucket})
- if processErr == nil {
- http.Redirect(w, r, "/website/inspect/"+view.Name.Pretty, http.StatusFound)
- return
- }
- }
-
- view, err := ctrl.Inspect(bucketName)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- describe, err := ctrl.Describe()
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- tpl := &WebsiteInspectTpl{describe, view, processErr}
- tWebsiteEdit := getTemplate("garage_website_edit.html")
- tWebsiteEdit.Execute(w, &tpl)
-}