mirror of
https://github.com/sysadminsmedia/homebox.git
synced 2025-12-21 13:23:14 +01:00
* [VNEXT] feat: Multi-DB type support (#291) * feat: Multi-DB type URL formats and config * fix: remove legacy sqlite path config and minor other things * fix: dumb eslint issues * fix: dumb eslint issues * fix: application can be tested with sqlite * fix: minor config formatting * chore: some cleanup * feat: postgres migration creation now works The migration creation for postgres now works properly. Removed MySQL support, having too many issues with it at this time. * chore: revert some strings back to bytes as they should be * feat: improve languages support * feat: add locale time ago formatting and the local name for the language in language dropdown * Update FUNDING.yml * chore: remove some more mysql stuff * fix: coderabbit security recommendations * fix: validate postgres sslmode * Update migrations.go * fix: postgres migration creation now works * fix: errors in raw sql queries * fix: lint error, and simpler SQL query * fix: migrations directory string * fix: stats related test * fix: sql query * Update TextArea.vue * Update TextField.vue * chore: run integration testing on multiple postgresql versions * chore: jobs should run for vnext branch PRs * fix: missed $ for Postgres testing * fix: environment variable for db ssl mode * fix: lint issue from a merge * chore: trying to fix postgresql testing * chore: trying to fix postgresql testing * fix: trying to fix postgresql testing * fix: trying to fix postgresql testing --------- Co-authored-by: tonya <tonya@tokia.dev> * fix: publish docker vnext branch * Add upgrade guide documentation * chore: add new config options to documentation * Update vnext (#314) * feat: make 404 follow theme and add a return home page * feat: sanitise translations when using v-html * chore: Add native API docs to website * chore: remove try it button from api docs --------- Co-authored-by: tonyaellie <tonya@tokia.dev> * Update Dockerfile Update dockerfile to test the theory of data folder breaking in vnext * fix: broken docker image * fix: statistics * feat: support mm, cm and inches for label generation * [VNEXT] feat: Multi-DB type support (#291) * feat: Multi-DB type URL formats and config * fix: remove legacy sqlite path config and minor other things * fix: dumb eslint issues * fix: dumb eslint issues * fix: application can be tested with sqlite * fix: minor config formatting * chore: some cleanup * feat: postgres migration creation now works The migration creation for postgres now works properly. Removed MySQL support, having too many issues with it at this time. * chore: revert some strings back to bytes as they should be * feat: improve languages support * feat: add locale time ago formatting and the local name for the language in language dropdown * Update FUNDING.yml * chore: remove some more mysql stuff * fix: coderabbit security recommendations * fix: validate postgres sslmode * Update migrations.go * fix: postgres migration creation now works * fix: errors in raw sql queries * fix: lint error, and simpler SQL query * fix: migrations directory string * fix: stats related test * fix: sql query * Update TextArea.vue * Update TextField.vue * chore: run integration testing on multiple postgresql versions * chore: jobs should run for vnext branch PRs * fix: missed $ for Postgres testing * fix: environment variable for db ssl mode * fix: lint issue from a merge * chore: trying to fix postgresql testing * chore: trying to fix postgresql testing * fix: trying to fix postgresql testing * fix: trying to fix postgresql testing --------- Co-authored-by: tonya <tonya@tokia.dev> * fix: publish docker vnext branch * Add upgrade guide documentation * chore: add new config options to documentation * Update Dockerfile Update dockerfile to test the theory of data folder breaking in vnext * fix: broken docker image * fix: statistics * feat: support mm, cm and inches for label generation * Update go dependencies * Update documentation * Slight update to docker actions * Small doc update * More doc changes * Sort out migrations * Temp fix to broken stats test * Update dependencies * Update documentation * Fix broken merge * Fix docker image sqlite path * Fix minor taskfile issue --------- Co-authored-by: tonya <tonya@tokia.dev> Co-authored-by: Katos <7927609+katosdev@users.noreply.github.com>
98 lines
3.0 KiB
Go
98 lines
3.0 KiB
Go
// Package config provides the configuration for the application.
|
|
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/ardanlabs/conf/v3"
|
|
)
|
|
|
|
const (
|
|
ModeDevelopment = "development"
|
|
ModeProduction = "production"
|
|
)
|
|
|
|
type Config struct {
|
|
conf.Version
|
|
Mode string `yaml:"mode" conf:"default:development"` // development or production
|
|
Web WebConfig `yaml:"web"`
|
|
Storage Storage `yaml:"storage"`
|
|
Database Database `yaml:"database"`
|
|
Log LoggerConf `yaml:"logger"`
|
|
Mailer MailerConf `yaml:"mailer"`
|
|
Demo bool `yaml:"demo"`
|
|
Debug DebugConf `yaml:"debug"`
|
|
Options Options `yaml:"options"`
|
|
LabelMaker LabelMakerConf `yaml:"labelmaker"`
|
|
}
|
|
|
|
type Options struct {
|
|
AllowRegistration bool `yaml:"disable_registration" conf:"default:true"`
|
|
AutoIncrementAssetID bool `yaml:"auto_increment_asset_id" conf:"default:true"`
|
|
CurrencyConfig string `yaml:"currencies"`
|
|
GithubReleaseCheck bool `yaml:"check_github_release" conf:"default:true"`
|
|
}
|
|
|
|
type DebugConf struct {
|
|
Enabled bool `yaml:"enabled" conf:"default:false"`
|
|
Port string `yaml:"port" conf:"default:4000"`
|
|
}
|
|
|
|
type WebConfig struct {
|
|
Port string `yaml:"port" conf:"default:7745"`
|
|
Host string `yaml:"host"`
|
|
MaxUploadSize int64 `yaml:"max_file_upload" conf:"default:10"`
|
|
ReadTimeout time.Duration `yaml:"read_timeout" conf:"default:10s"`
|
|
WriteTimeout time.Duration `yaml:"write_timeout" conf:"default:10s"`
|
|
IdleTimeout time.Duration `yaml:"idle_timeout" conf:"default:30s"`
|
|
}
|
|
|
|
type LabelMakerConf struct {
|
|
Width int64 `yaml:"width" conf:"default:526"`
|
|
Height int64 `yaml:"height" conf:"default:200"`
|
|
Padding int64 `yaml:"padding" conf:"default:32"`
|
|
Margin int64 `yaml:"margin" conf:"default:32"`
|
|
FontSize float64 `yaml:"font_size" conf:"default:32.0"`
|
|
PrintCommand *string `yaml:"string"`
|
|
AdditionalInformation *string `yaml:"string"`
|
|
DynamicLength bool `yaml:"bool" conf:"default:true"`
|
|
}
|
|
|
|
// New parses the CLI/Config file and returns a Config struct. If the file argument is an empty string, the
|
|
// file is not read. If the file is not empty, the file is read and the Config struct is returned.
|
|
func New(buildstr string, description string) (*Config, error) {
|
|
var cfg Config
|
|
const prefix = "HBOX"
|
|
|
|
cfg.Version = conf.Version{
|
|
Build: buildstr,
|
|
Desc: description,
|
|
}
|
|
|
|
help, err := conf.Parse(prefix, &cfg)
|
|
if err != nil {
|
|
if errors.Is(err, conf.ErrHelpWanted) {
|
|
fmt.Println(help)
|
|
os.Exit(0)
|
|
}
|
|
return &cfg, fmt.Errorf("parsing config: %w", err)
|
|
}
|
|
|
|
return &cfg, nil
|
|
}
|
|
|
|
// Print prints the configuration to stdout as a json indented string
|
|
// This is useful for debugging. If the marshaller errors out, it will panic.
|
|
func (c *Config) Print() {
|
|
res, err := json.MarshalIndent(c, "", " ")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println(string(res))
|
|
}
|