forked from NYANDEV/forgejo
2de8602855
It breaks existing instances that would otherwise work perfectly
fine. Failing to start an instance should only happen when there is a
compelling reason to do so, for instance if the `app.ini` could not be
modified in a way that is backward compatible. If the only motivation
is to remove the setting for cosmetic reason, it must not be fatal.
(cherry picked from commit c09ef82e9a4a1f450adce46fe7adcf733d8cc9da)
(cherry picked from commit e80aaa11d9
)
85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package setting
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"time"
|
|
|
|
"code.gitea.io/gitea/modules/generate"
|
|
)
|
|
|
|
// LFS represents the configuration for Git LFS
|
|
var LFS = struct {
|
|
StartServer bool `ini:"LFS_START_SERVER"`
|
|
JWTSecretBase64 string `ini:"LFS_JWT_SECRET"`
|
|
JWTSecretBytes []byte `ini:"-"`
|
|
HTTPAuthExpiry time.Duration `ini:"LFS_HTTP_AUTH_EXPIRY"`
|
|
MaxFileSize int64 `ini:"LFS_MAX_FILE_SIZE"`
|
|
LocksPagingNum int `ini:"LFS_LOCKS_PAGING_NUM"`
|
|
|
|
Storage *Storage
|
|
}{}
|
|
|
|
func loadLFSFrom(rootCfg ConfigProvider) error {
|
|
sec := rootCfg.Section("server")
|
|
if err := sec.MapTo(&LFS); err != nil {
|
|
return fmt.Errorf("failed to map LFS settings: %v", err)
|
|
}
|
|
|
|
lfsSec, _ := rootCfg.GetSection("lfs")
|
|
|
|
// Specifically default PATH to LFS_CONTENT_PATH
|
|
// DEPRECATED should not be removed because users maybe upgrade from lower version to the latest version
|
|
// if these are removed, the warning will not be shown
|
|
deprecatedSetting(rootCfg, "server", "LFS_CONTENT_PATH", "lfs", "PATH", "v1.19.0")
|
|
|
|
if val := sec.Key("LFS_CONTENT_PATH").String(); val != "" {
|
|
if lfsSec == nil {
|
|
lfsSec = rootCfg.Section("lfs")
|
|
}
|
|
lfsSec.Key("PATH").MustString(val)
|
|
}
|
|
|
|
var err error
|
|
LFS.Storage, err = getStorage(rootCfg, "lfs", "", lfsSec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Rest of LFS service settings
|
|
if LFS.LocksPagingNum == 0 {
|
|
LFS.LocksPagingNum = 50
|
|
}
|
|
|
|
LFS.HTTPAuthExpiry = sec.Key("LFS_HTTP_AUTH_EXPIRY").MustDuration(24 * time.Hour)
|
|
|
|
if !LFS.StartServer {
|
|
return nil
|
|
}
|
|
|
|
LFS.JWTSecretBytes = make([]byte, 32)
|
|
n, err := base64.RawURLEncoding.Decode(LFS.JWTSecretBytes, []byte(LFS.JWTSecretBase64))
|
|
|
|
if err != nil || n != 32 {
|
|
LFS.JWTSecretBase64, err = generate.NewJwtSecretBase64()
|
|
if err != nil {
|
|
return fmt.Errorf("error generating JWT Secret for custom config: %v", err)
|
|
}
|
|
|
|
// Save secret
|
|
saveCfg, err := rootCfg.PrepareSaving()
|
|
if err != nil {
|
|
return fmt.Errorf("error saving JWT Secret for custom config: %v", err)
|
|
}
|
|
rootCfg.Section("server").Key("LFS_JWT_SECRET").SetValue(LFS.JWTSecretBase64)
|
|
saveCfg.Section("server").Key("LFS_JWT_SECRET").SetValue(LFS.JWTSecretBase64)
|
|
if err := saveCfg.Save(); err != nil {
|
|
return fmt.Errorf("error saving JWT Secret for custom config: %v", err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|