// Copyright (c) 2025 Nikolai Papin // // This file is part of Easywish // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See // the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package minioclient import ( "easywish/config" "net/url" "time" "github.com/gin-gonic/gin" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) func NewMinioClient(router *gin.Engine) *minio.Client { cfg := config.GetConfig() if cfg.MinioUrl == "" { panic("Failed Minio URL not set in config") } minioURL, err := url.Parse(cfg.MinioUrl); if err != nil { panic("Failed to parse Minio URL: " + err.Error()) } user := minioURL.User.Username() password, ok := minioURL.User.Password(); if !ok { panic("Failed to parse Minio secret key from the URL") } client, err := minio.New(minioURL.Host, &minio.Options{ Creds: credentials.NewStaticV4(user, password, ""), Secure: minioURL.Scheme == "https", }); if err != nil { panic("Failed to initiate minio client: " + err.Error()) } _, err = client.HealthCheck(time.Second*5); if err != nil { panic("Failed to communicate with minio: " + err.Error()) } setupBuckets(client) setupGinEndpoint(router) return client }