117 lines
2.4 KiB
Go
117 lines
2.4 KiB
Go
|
package internal
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"html/template"
|
||
|
"log"
|
||
|
"net/url"
|
||
|
|
||
|
"git.sr.ht/~erock/wish/cms/config"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
type SitePageData struct {
|
||
|
Domain template.URL
|
||
|
HomeURL template.URL
|
||
|
Email string
|
||
|
}
|
||
|
|
||
|
type ConfigSite struct {
|
||
|
config.ConfigCms
|
||
|
config.ConfigURL
|
||
|
SubdomainsEnabled bool
|
||
|
}
|
||
|
|
||
|
func NewConfigSite() *ConfigSite {
|
||
|
domain := GetEnv("PASTES_DOMAIN", "pastes.sh")
|
||
|
email := GetEnv("PASTES_EMAIL", "hello@pastes.sh")
|
||
|
subdomains := GetEnv("PASTES_SUBDOMAINS", "0")
|
||
|
port := GetEnv("PASTES_WEB_PORT", "3000")
|
||
|
dbURL := GetEnv("DATABASE_URL", "")
|
||
|
subdomainsEnabled := false
|
||
|
if subdomains == "1" {
|
||
|
subdomainsEnabled = true
|
||
|
}
|
||
|
|
||
|
intro := "To get started, enter a username.\n"
|
||
|
intro += "Then create a folder locally (e.g. ~/pastes).\n"
|
||
|
intro += "Then write your paste post (e.g. feature.patch).\n"
|
||
|
intro += "Finally, send your files to us:\n\n"
|
||
|
intro += fmt.Sprintf("scp ~/pastes/* %s:/", domain)
|
||
|
|
||
|
return &ConfigSite{
|
||
|
SubdomainsEnabled: subdomainsEnabled,
|
||
|
ConfigCms: config.ConfigCms{
|
||
|
Domain: domain,
|
||
|
Port: port,
|
||
|
Email: email,
|
||
|
DbURL: dbURL,
|
||
|
Description: "a pastebin for hackers.",
|
||
|
IntroText: intro,
|
||
|
Logger: CreateLogger(),
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *ConfigSite) GetSiteData() *SitePageData {
|
||
|
return &SitePageData{
|
||
|
Domain: template.URL(c.Domain),
|
||
|
HomeURL: template.URL(c.HomeURL()),
|
||
|
Email: c.Email,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *ConfigSite) BlogURL(username string) string {
|
||
|
if c.IsSubdomains() {
|
||
|
return fmt.Sprintf("//%s.%s", username, c.Domain)
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf("/%s", username)
|
||
|
}
|
||
|
|
||
|
func (c *ConfigSite) PostURL(username, filename string) string {
|
||
|
fname := url.PathEscape(filename)
|
||
|
if c.IsSubdomains() {
|
||
|
return fmt.Sprintf("//%s.%s/%s", username, c.Domain, fname)
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf("/%s/%s", username, fname)
|
||
|
}
|
||
|
|
||
|
func (c *ConfigSite) IsSubdomains() bool {
|
||
|
return c.SubdomainsEnabled
|
||
|
}
|
||
|
|
||
|
func (c *ConfigSite) RssBlogURL(username string) string {
|
||
|
if c.IsSubdomains() {
|
||
|
return fmt.Sprintf("//%s.%s/rss", username, c.Domain)
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf("/%s/rss", username)
|
||
|
}
|
||
|
|
||
|
func (c *ConfigSite) HomeURL() string {
|
||
|
if c.IsSubdomains() {
|
||
|
return fmt.Sprintf("//%s", c.Domain)
|
||
|
}
|
||
|
|
||
|
return "/"
|
||
|
}
|
||
|
|
||
|
func (c *ConfigSite) ReadURL() string {
|
||
|
if c.IsSubdomains() {
|
||
|
return fmt.Sprintf("https://%s/read", c.Domain)
|
||
|
}
|
||
|
|
||
|
return "/read"
|
||
|
}
|
||
|
|
||
|
func CreateLogger() *zap.SugaredLogger {
|
||
|
logger, err := zap.NewProduction()
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
return logger.Sugar()
|
||
|
}
|