Unverified Commit d9a92b2e authored by Comix's avatar Comix Committed by GitHub

feat: support path style of s3 url (#4304)

Signed-off-by: 's avatarComixHe <ComixHe1895@outlook.com>
parent 702c0922
...@@ -31,6 +31,7 @@ func NewClient(ctx context.Context, s3Config *storepb.StorageS3Config) (*Client, ...@@ -31,6 +31,7 @@ func NewClient(ctx context.Context, s3Config *storepb.StorageS3Config) (*Client,
client := s3.NewFromConfig(cfg, func(o *s3.Options) { client := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.BaseEndpoint = aws.String(s3Config.Endpoint) o.BaseEndpoint = aws.String(s3Config.Endpoint)
o.UsePathStyle = s3Config.UsePathStyle
}) })
return &Client{ return &Client{
Client: client, Client: client,
......
...@@ -89,6 +89,7 @@ message WorkspaceStorageSetting { ...@@ -89,6 +89,7 @@ message WorkspaceStorageSetting {
string endpoint = 3; string endpoint = 3;
string region = 4; string region = 4;
string bucket = 5; string bucket = 5;
bool use_path_style = 6;
} }
// The S3 config. // The S3 config.
S3Config s3_config = 4; S3Config s3_config = 4;
......
...@@ -1864,6 +1864,8 @@ definitions: ...@@ -1864,6 +1864,8 @@ definitions:
type: string type: string
bucket: bucket:
type: string type: string
usePathStyle:
type: boolean
title: 'Reference: https://developers.cloudflare.com/r2/examples/aws/aws-sdk-go/' title: 'Reference: https://developers.cloudflare.com/r2/examples/aws/aws-sdk-go/'
apiHttpBody: apiHttpBody:
type: object type: object
......
This diff is collapsed.
...@@ -91,6 +91,7 @@ message StorageS3Config { ...@@ -91,6 +91,7 @@ message StorageS3Config {
string endpoint = 3; string endpoint = 3;
string region = 4; string region = 4;
string bucket = 5; string bucket = 5;
bool use_path_style = 6;
} }
message WorkspaceMemoRelatedSetting { message WorkspaceMemoRelatedSetting {
......
...@@ -196,6 +196,7 @@ func convertWorkspaceStorageSettingFromStore(settingpb *storepb.WorkspaceStorage ...@@ -196,6 +196,7 @@ func convertWorkspaceStorageSettingFromStore(settingpb *storepb.WorkspaceStorage
Endpoint: settingpb.S3Config.Endpoint, Endpoint: settingpb.S3Config.Endpoint,
Region: settingpb.S3Config.Region, Region: settingpb.S3Config.Region,
Bucket: settingpb.S3Config.Bucket, Bucket: settingpb.S3Config.Bucket,
UsePathStyle: settingpb.S3Config.UsePathStyle,
} }
} }
return setting return setting
...@@ -217,6 +218,7 @@ func convertWorkspaceStorageSettingToStore(setting *v1pb.WorkspaceStorageSetting ...@@ -217,6 +218,7 @@ func convertWorkspaceStorageSettingToStore(setting *v1pb.WorkspaceStorageSetting
Endpoint: setting.S3Config.Endpoint, Endpoint: setting.S3Config.Endpoint,
Region: setting.S3Config.Region, Region: setting.S3Config.Region,
Bucket: setting.S3Config.Bucket, Bucket: setting.S3Config.Bucket,
UsePathStyle: setting.S3Config.UsePathStyle,
} }
} }
return settingpb return settingpb
......
import { Divider, List, ListItem, Radio, RadioGroup, Tooltip } from "@mui/joy"; import { Divider, List, ListItem, Radio, RadioGroup, Tooltip, Switch } from "@mui/joy";
import { Button, Input } from "@usememos/mui"; import { Button, Input } from "@usememos/mui";
import { isEqual } from "lodash-es"; import { isEqual } from "lodash-es";
import { HelpCircleIcon } from "lucide-react"; import { HelpCircleIcon } from "lucide-react";
import { useMemo, useState } from "react"; import React, { useMemo, useState } from "react";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { workspaceSettingNamePrefix, useWorkspaceSettingStore } from "@/store/v1"; import { workspaceSettingNamePrefix, useWorkspaceSettingStore } from "@/store/v1";
...@@ -98,6 +98,12 @@ const StorageSection = () => { ...@@ -98,6 +98,12 @@ const StorageSection = () => {
handlePartialS3ConfigChanged({ bucket: event.target.value }); handlePartialS3ConfigChanged({ bucket: event.target.value });
}; };
const handleS3ConfigUsePathStyleChanged = (event: React.ChangeEvent<HTMLInputElement>) => {
handlePartialS3ConfigChanged({
usePathStyle: event.target.checked,
});
};
const handleStorageTypeChanged = async (storageType: WorkspaceStorageSetting_StorageType) => { const handleStorageTypeChanged = async (storageType: WorkspaceStorageSetting_StorageType) => {
const update: WorkspaceStorageSetting = { const update: WorkspaceStorageSetting = {
...workspaceStorageSetting, ...workspaceStorageSetting,
...@@ -174,6 +180,10 @@ const StorageSection = () => { ...@@ -174,6 +180,10 @@ const StorageSection = () => {
<span className="text-gray-700 dark:text-gray-500 mr-1">Bucket</span> <span className="text-gray-700 dark:text-gray-500 mr-1">Bucket</span>
<Input value={workspaceStorageSetting.s3Config?.bucket} placeholder="" onChange={handleS3ConfigBucketChanged} /> <Input value={workspaceStorageSetting.s3Config?.bucket} placeholder="" onChange={handleS3ConfigBucketChanged} />
</div> </div>
<div className="w-full flex flex-row justify-between items-center">
<span className="text-gray-700 dark:text-gray-500 mr-1">Use Path Style</span>
<Switch checked={workspaceStorageSetting.s3Config?.usePathStyle} onChange={handleS3ConfigUsePathStyleChanged} />
</div>
</> </>
)} )}
<div> <div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment