mirror of
https://github.com/khairul169/garage-webui.git
synced 2025-04-27 22:39:31 +07:00
fix: remove unused config struct key, fix local aliases parsing error
This commit is contained in:
parent
5a90dd8377
commit
91c396dd68
@ -34,13 +34,14 @@ func (b *Buckets) GetAll(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
var bucket schema.Bucket
|
||||
if err := json.Unmarshal(body, &bucket); err != nil {
|
||||
var data schema.Bucket
|
||||
if err := json.Unmarshal(body, &data); err != nil {
|
||||
ch <- schema.Bucket{ID: bucket.ID, GlobalAliases: bucket.GlobalAliases}
|
||||
return
|
||||
}
|
||||
|
||||
ch <- bucket
|
||||
data.LocalAliases = bucket.LocalAliases
|
||||
ch <- data
|
||||
}()
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,15 @@
|
||||
package schema
|
||||
|
||||
type GetBucketsRes struct {
|
||||
ID string `json:"id"`
|
||||
GlobalAliases []string `json:"globalAliases"`
|
||||
LocalAliases []string `json:"localAliases"`
|
||||
ID string `json:"id"`
|
||||
GlobalAliases []string `json:"globalAliases"`
|
||||
LocalAliases []LocalAlias `json:"localAliases"`
|
||||
}
|
||||
|
||||
type Bucket struct {
|
||||
ID string `json:"id"`
|
||||
GlobalAliases []string `json:"globalAliases"`
|
||||
LocalAliases []LocalAlias `json:"localAliases"`
|
||||
WebsiteAccess bool `json:"websiteAccess"`
|
||||
WebsiteConfig WebsiteConfig `json:"websiteConfig"`
|
||||
Keys []KeyElement `json:"keys"`
|
||||
@ -21,12 +22,17 @@ type Bucket struct {
|
||||
Quotas Quotas `json:"quotas"`
|
||||
}
|
||||
|
||||
type LocalAlias struct {
|
||||
AccessKeyID string `json:"accessKeyId"`
|
||||
Alias string `json:"alias"`
|
||||
}
|
||||
|
||||
type KeyElement struct {
|
||||
AccessKeyID string `json:"accessKeyId"`
|
||||
Name string `json:"name"`
|
||||
Permissions Permissions `json:"permissions"`
|
||||
BucketLocalAliases []interface{} `json:"bucketLocalAliases"`
|
||||
SecretAccessKey string `json:"secretAccessKey"`
|
||||
AccessKeyID string `json:"accessKeyId"`
|
||||
Name string `json:"name"`
|
||||
Permissions Permissions `json:"permissions"`
|
||||
BucketLocalAliases []string `json:"bucketLocalAliases"`
|
||||
SecretAccessKey string `json:"secretAccessKey"`
|
||||
}
|
||||
|
||||
type Permissions struct {
|
||||
|
@ -1,18 +1,12 @@
|
||||
package schema
|
||||
|
||||
type Config struct {
|
||||
CompressionLevel int64 `json:"compression_level" toml:"compression_level"`
|
||||
DataDir string `json:"data_dir" toml:"data_dir"`
|
||||
DBEngine string `json:"db_engine" toml:"db_engine"`
|
||||
MetadataAutoSnapshotInterval string `json:"metadata_auto_snapshot_interval" toml:"metadata_auto_snapshot_interval"`
|
||||
MetadataDir string `json:"metadata_dir" toml:"metadata_dir"`
|
||||
ReplicationFactor int64 `json:"replication_factor" toml:"replication_factor"`
|
||||
RPCBindAddr string `json:"rpc_bind_addr" toml:"rpc_bind_addr"`
|
||||
RPCPublicAddr string `json:"rpc_public_addr" toml:"rpc_public_addr"`
|
||||
RPCSecret string `json:"rpc_secret" toml:"rpc_secret"`
|
||||
Admin Admin `json:"admin" toml:"admin"`
|
||||
S3API S3API `json:"s3_api" toml:"s3_api"`
|
||||
S3Web S3Web `json:"s3_web" toml:"s3_web"`
|
||||
RPCBindAddr string `json:"rpc_bind_addr" toml:"rpc_bind_addr"`
|
||||
RPCPublicAddr string `json:"rpc_public_addr" toml:"rpc_public_addr"`
|
||||
RPCSecret string `json:"rpc_secret" toml:"rpc_secret"`
|
||||
Admin Admin `json:"admin" toml:"admin"`
|
||||
S3API S3API `json:"s3_api" toml:"s3_api"`
|
||||
S3Web S3Web `json:"s3_web" toml:"s3_web"`
|
||||
}
|
||||
|
||||
type Admin struct {
|
||||
|
@ -4,7 +4,7 @@ import { readableBytes } from "@/lib/utils";
|
||||
import Button from "@/components/ui/button";
|
||||
|
||||
type Props = {
|
||||
data: Bucket;
|
||||
data: Bucket & { aliases: string[] };
|
||||
};
|
||||
|
||||
const BucketCard = ({ data }: Props) => {
|
||||
@ -15,7 +15,7 @@ const BucketCard = ({ data }: Props) => {
|
||||
<ArchiveIcon size={28} className="shrink-0" />
|
||||
|
||||
<p className="text-xl font-medium truncate">
|
||||
{data.globalAliases?.join(", ")}
|
||||
{data.aliases?.join(", ")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -84,7 +84,7 @@ const AllowKeyDialog = ({ currentKeys }: Props) => {
|
||||
Allow Key
|
||||
</Button>
|
||||
|
||||
<Modal ref={dialogRef} backdrop open={isOpen}>
|
||||
<Modal ref={dialogRef} backdrop open={isOpen} className="max-w-2xl">
|
||||
<Modal.Header className="mb-1">Allow Key</Modal.Header>
|
||||
<Modal.Body>
|
||||
<p>Enter the key you want to allow access to.</p>
|
||||
@ -100,6 +100,7 @@ const AllowKeyDialog = ({ currentKeys }: Props) => {
|
||||
/>
|
||||
Key
|
||||
</label>
|
||||
<label>Local Aliases</label>
|
||||
<label className="flex items-center gap-2 cursor-pointer">
|
||||
<Checkbox
|
||||
color="primary"
|
||||
@ -129,23 +130,31 @@ const AllowKeyDialog = ({ currentKeys }: Props) => {
|
||||
<Table.Body>
|
||||
{!keyFields.length ? (
|
||||
<tr>
|
||||
<td colSpan={4} className="text-center">
|
||||
<td colSpan={5} className="text-center">
|
||||
No keys found
|
||||
</td>
|
||||
</tr>
|
||||
) : null}
|
||||
{keyFields.map((field, index) => (
|
||||
<Table.Row key={field.id}>
|
||||
<CheckboxField
|
||||
form={form}
|
||||
name={`keys.${index}.checked`}
|
||||
label={field.name || field.keyId?.substring(0, 8)}
|
||||
/>
|
||||
<CheckboxField form={form} name={`keys.${index}.read`} />
|
||||
<CheckboxField form={form} name={`keys.${index}.write`} />
|
||||
<CheckboxField form={form} name={`keys.${index}.owner`} />
|
||||
</Table.Row>
|
||||
))}
|
||||
{keyFields.map((field, index) => {
|
||||
const curKey = bucket.keys.find(
|
||||
(key) => key.accessKeyId === field.keyId
|
||||
);
|
||||
return (
|
||||
<Table.Row key={field.id}>
|
||||
<CheckboxField
|
||||
form={form}
|
||||
name={`keys.${index}.checked`}
|
||||
label={field.name || field.keyId?.substring(0, 8)}
|
||||
/>
|
||||
<span>
|
||||
{curKey?.bucketLocalAliases?.join(", ") || "-"}
|
||||
</span>
|
||||
<CheckboxField form={form} name={`keys.${index}.read`} />
|
||||
<CheckboxField form={form} name={`keys.${index}.write`} />
|
||||
<CheckboxField form={form} name={`keys.${index}.owner`} />
|
||||
</Table.Row>
|
||||
);
|
||||
})}
|
||||
</Table.Body>
|
||||
</Table>
|
||||
</div>
|
||||
|
@ -50,6 +50,7 @@ const PermissionsTab = () => {
|
||||
<Table.Head>
|
||||
<span>#</span>
|
||||
<span>Key</span>
|
||||
<span>Aliases</span>
|
||||
<span>Read</span>
|
||||
<span>Write</span>
|
||||
<span>Owner</span>
|
||||
@ -61,6 +62,7 @@ const PermissionsTab = () => {
|
||||
<Table.Row>
|
||||
<span>{idx + 1}</span>
|
||||
<span>{key.name || key.accessKeyId?.substring(0, 8)}</span>
|
||||
<span>{key.bucketLocalAliases?.join(", ") || "-"}</span>
|
||||
<span>
|
||||
<Checkbox
|
||||
checked={key.permissions?.read}
|
||||
|
@ -10,20 +10,27 @@ const BucketsPage = () => {
|
||||
const [search, setSearch] = useState("");
|
||||
|
||||
const items = useMemo(() => {
|
||||
let buckets = data || [];
|
||||
let buckets =
|
||||
data?.map((bucket) => {
|
||||
return {
|
||||
...bucket,
|
||||
aliases: [
|
||||
...(bucket.globalAliases || []),
|
||||
...(bucket.localAliases?.map((l) => l.alias) || []),
|
||||
],
|
||||
};
|
||||
}) || [];
|
||||
|
||||
if (search?.length > 0) {
|
||||
const q = search.toLowerCase();
|
||||
buckets = buckets.filter(
|
||||
(bucket) =>
|
||||
bucket.id.includes(q) ||
|
||||
bucket.globalAliases.find((alias) => alias.includes(q))
|
||||
bucket.aliases.find((alias) => alias.includes(q))
|
||||
);
|
||||
}
|
||||
|
||||
buckets = buckets.sort((a, b) =>
|
||||
a.globalAliases[0].localeCompare(b.globalAliases[0])
|
||||
);
|
||||
buckets = buckets.sort((a, b) => a.aliases[0].localeCompare(b.aliases[0]));
|
||||
|
||||
return buckets;
|
||||
}, [data, search]);
|
||||
|
@ -5,6 +5,7 @@ export type GetBucketRes = Bucket[];
|
||||
export type Bucket = {
|
||||
id: string;
|
||||
globalAliases: string[];
|
||||
localAliases: LocalAlias[];
|
||||
websiteAccess: boolean;
|
||||
websiteConfig?: WebsiteConfig | null;
|
||||
keys: Key[];
|
||||
@ -17,11 +18,16 @@ export type Bucket = {
|
||||
quotas: Quotas;
|
||||
};
|
||||
|
||||
export type LocalAlias = {
|
||||
accessKeyId: string;
|
||||
alias: string;
|
||||
};
|
||||
|
||||
export type Key = {
|
||||
accessKeyId: string;
|
||||
name: string;
|
||||
permissions: Permissions;
|
||||
bucketLocalAliases: any[];
|
||||
bucketLocalAliases: string[];
|
||||
};
|
||||
|
||||
export type Permissions = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user