package config import ( "github.com/BurntSushi/toml" vocab "github.com/go-ap/activitypub" "github.com/kirsle/configdir" "golang.org/x/crypto/bcrypt" "path/filepath" ) type ProfileMetadata struct { Key string `toml:"key"` Value string `toml:"value"` } type BlockedServer struct { Hostname string `toml:"hostname"` Reason string `toml:"reason"` } type PrivacyReplace struct { Domain string `toml:"domain"` ReplaceBy string `toml:"replace_by"` } type Config struct { Domain string `toml:"domain"` Username string `toml:"username"` Password string `toml:"admin_password"` Name string `toml:"name"` Summary string `toml:"summary"` Https bool `toml:"https"` IconUrl string `toml:"icon_url""` ImageUrl string `toml:"image_url"` Metadata []ProfileMetadata `toml:"metadata"` Secret string `toml:"secret"` TrustedHosts []string `toml:"trusted_hosts"` ManuallyApprove bool `toml:"manually_approves_followers"` BlockedServers []BlockedServer `toml:"blocked_servers"` CustomFooter string `toml:"custom_footer"` Emoji string `toml:"emoji"` DisabledNotificaions []string `toml:"disabled_notifications"` CodeTheme string `toml:"code_highlighting_theme"` AlsoKnownAs string `toml:"also_known_as"` HideFollowers bool `toml:"hides_followers"` HideFollowing bool `toml:"hides_following"` InboxRetentionDays int `toml:"inbox_retention_days"` CustomCSP string `toml:"custom_content_security_policy"` WebfingerDomain string `toml:"webfinger_domain"` Debug bool `toml:"debug"` PrivacyReplace []PrivacyReplace `toml:"privacy_replace"` KeyPath string `toml:"key_path"` SessionTimeout int `toml:"session_timeout"` Id string `toml:"id"` } func (c Config) GetIcon() vocab.IRI { // @todo return a media object, instead of an IRI return vocab.IRI(c.IconUrl) } func (c Config) GetActor() vocab.Actor { return vocab.Actor{ // Id: Name: vocab.NaturalLanguageValues{ vocab.LangRefValue{ Ref: "en", Value: []byte(c.Name), }, }, Icon: c.GetIcon(), } } var config Config func newConfig() Config { return Config{ TrustedHosts: []string{"127.0.0.1"}, CodeTheme: "friendly_grayscale", InboxRetentionDays: 15, SessionTimeout: 3600 * 24 * 3, } } func init() { config = newConfig() configPath := configdir.LocalConfig("lenore") if err := configdir.MakePath(configPath); err != nil { panic(err) } configFile := filepath.Join(configPath, "profile.toml") if _, err := toml.DecodeFile(configFile, &config); err != nil { panic(err) } } func GetConfig() Config { return config } func CheckPassword(pass string) bool { err := bcrypt.CompareHashAndPassword([]byte(config.Password), []byte(pass)) return err == nil }