aboutsummaryrefslogtreecommitdiffstats
path: root/modules/setting/storage.go
blob: c678a08f5b9c98b677526f2e2ab63d0cc40ecf75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright 2020 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package setting

import (
	"strings"

	"code.gitea.io/gitea/modules/log"
	ini "gopkg.in/ini.v1"
)

// enumerate all storage types
const (
	LocalStorageType = "local"
	MinioStorageType = "minio"
)

// Storage represents configuration of storages
type Storage struct {
	Type        string
	Path        string
	ServeDirect bool
	Minio       struct {
		Endpoint        string
		AccessKeyID     string
		SecretAccessKey string
		UseSSL          bool
		Bucket          string
		Location        string
		BasePath        string
	}
}

var (
	storages = make(map[string]Storage)
)

func getStorage(sec *ini.Section) Storage {
	var storage Storage
	storage.Type = sec.Key("STORAGE_TYPE").MustString(LocalStorageType)
	storage.ServeDirect = sec.Key("SERVE_DIRECT").MustBool(false)
	switch storage.Type {
	case LocalStorageType:
	case MinioStorageType:
		storage.Minio.Endpoint = sec.Key("MINIO_ENDPOINT").MustString("localhost:9000")
		storage.Minio.AccessKeyID = sec.Key("MINIO_ACCESS_KEY_ID").MustString("")
		storage.Minio.SecretAccessKey = sec.Key("MINIO_SECRET_ACCESS_KEY").MustString("")
		storage.Minio.Bucket = sec.Key("MINIO_BUCKET").MustString("gitea")
		storage.Minio.Location = sec.Key("MINIO_LOCATION").MustString("us-east-1")
		storage.Minio.UseSSL = sec.Key("MINIO_USE_SSL").MustBool(false)
	}
	return storage
}

func newStorageService() {
	sec := Cfg.Section("storage")
	storages["default"] = getStorage(sec)

	for _, sec := range Cfg.Section("storage").ChildSections() {
		name := strings.TrimPrefix(sec.Name(), "storage.")
		if name == "default" || name == LocalStorageType || name == MinioStorageType {
			log.Error("storage name %s is system reserved!", name)
			continue
		}
		storages[name] = getStorage(sec)
	}
}