- POST /api/v1/auth/register with mandatory consents
- POST /api/v1/auth/login
- GET /api/v1/me (protected)
- GET /api/v1/legal/{terms,privacy,disclaimer}
- Migrations for users, consent_log, audit_log
- bcrypt + JWT (access + refresh)
- Docker Compose stack
37 lines
837 B
Go
37 lines
837 B
Go
package storage
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/minio/minio-go/v7"
|
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
|
)
|
|
|
|
type Storage struct {
|
|
Client *minio.Client
|
|
Bucket string
|
|
}
|
|
|
|
func New(ctx context.Context, endpoint, accessKey, secretKey, bucket string, useSSL bool) (*Storage, error) {
|
|
client, err := minio.New(endpoint, &minio.Options{
|
|
Creds: credentials.NewStaticV4(accessKey, secretKey, ""),
|
|
Secure: useSSL,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("minio: %w", err)
|
|
}
|
|
|
|
exists, err := client.BucketExists(ctx, bucket)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("bucket exists check: %w", err)
|
|
}
|
|
if !exists {
|
|
if err := client.MakeBucket(ctx, bucket, minio.MakeBucketOptions{}); err != nil {
|
|
return nil, fmt.Errorf("make bucket: %w", err)
|
|
}
|
|
}
|
|
|
|
return &Storage{Client: client, Bucket: bucket}, nil
|
|
}
|