diff --git a/.gitignore b/.gitignore index 9184d62..649bd21 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ data/config.toml +data/announcements.json \ No newline at end of file diff --git a/.woodpecker.yml b/.woodpecker.yml index d7ada65..1d05c78 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -2,14 +2,18 @@ pipeline: build: when: event: [push, pull_request, tag, deployment] + image: golang:latest commands: - go build -o segfautils dockerize_n_publish: when: + branch : [master] event: [push] name: dockerize and publish - image: plugins/docker + image: plugins/docker + registry: git.projectsegfau.lt + repo: git.projectsegfau.lt/projectsegfault/segfautils settings: username: from_secret: username @@ -17,6 +21,20 @@ pipeline: from_secret: password repo: projectsegfault/segfautils dockerfile: Dockerfile - + dockerize_dev: + when: + event: [push] + image: plugins/docker + name: dockerize and publish dev + registry: git.projectsegfau.lt + repo: git.projectsegfau.lt/projectsegfault/segfautils + settings: + username: + from_secret: username + password: + from_secret: password + repo: projectsegfau.lt/segfautils + tags: dev + dockerfile: Dockerfile diff --git a/api/announcements.go b/api/announcements.go index d6703dc..176dcc1 100644 --- a/api/announcements.go +++ b/api/announcements.go @@ -15,8 +15,30 @@ import ( var ( authToken = config.AuthToken() + resAnn = config.OptAnn() ) +func AnnCheck() { + if resAnn == "false" { + log.Println("[Segfautils] ℹ Announcements are disabled") + http.HandleFunc("/announcements", func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "Announcements are disabled.", http.StatusServiceUnavailable) + }) + http.HandleFunc("/api/announcements", func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "{\"enabled\": \"false\"}", http.StatusServiceUnavailable) + }) + } else { + AnnPage() + Announcements() + } +} + +func AnnPage() { + http.HandleFunc("/announcements", func(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, "static/announcements.html") + }) +} + func Announcements() { http.HandleFunc("/api/announcements", getAnnouncements) http.HandleFunc("/api/announcements/post", handleAnnouncements) @@ -39,6 +61,7 @@ func handleAnnouncements(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) now := time.Now().Unix() data := map[string]interface{}{ + "enabled": "true", "title": r.FormValue("title"), "link": r.FormValue("link"), "severity": r.FormValue("severity"), diff --git a/api/form.go b/api/form.go index dade019..a576564 100644 --- a/api/form.go +++ b/api/form.go @@ -1,18 +1,16 @@ package api import ( - "log" - "net/http" - - "github.com/kataras/hcaptcha" - "fmt" - "io" + "log" + "net/http" "net/url" + "text/template" "github.com/ProjectSegfault/segfautils/config" "github.com/ProjectSegfault/segfautils/utils" + "github.com/kataras/hcaptcha" ) var ( @@ -20,8 +18,37 @@ var ( secretKey = config.HCaptchaSecretKey() webhookURL = config.WebhookURL() client = hcaptcha.New(secretKey) /* See `Client.FailureHandler` too. */ + resForm = config.OptForm() ) +func FormCheck() { + if resForm == "false" { + log.Println("[Segfautils] ℹ Contact form is disabled") + http.HandleFunc("/form", func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "Form is disabled.", http.StatusServiceUnavailable) + }) + } else { + FormPage() + Form() + } +} + +func FormPage() { + type StaticThing struct { + HCaptchaSiteKey string + } + + tmpl_form := template.Must(template.ParseFiles("static/form.html")) + http.HandleFunc("/form/", func(w http.ResponseWriter, r *http.Request) { + + hcaptcha_site_key := config.HCaptchaSiteKey() + data := StaticThing{ + HCaptchaSiteKey: hcaptcha_site_key, + } + tmpl_form.Execute(w, data) + }) +} + func Form() { http.HandleFunc("/api/form", client.HandlerFunc(theActualFormCode)) } diff --git a/api/oauth.go b/api/oauth.go new file mode 100644 index 0000000..4cb37bc --- /dev/null +++ b/api/oauth.go @@ -0,0 +1,15 @@ +package api + +import ( + "github.com/ProjectSegfault/segfautils/config" +) + +var ( + clientID = config.OAuthClientID() + clientSecret = config.OAuthClientSecret() + redirectURL = config.OAuthRedirectURL() + authURL = config.OAuthURL() +) + +func LoginOAuth() { +} diff --git a/config/authtoken.go b/config/authtoken.go index f9b7b2f..e332783 100644 --- a/config/authtoken.go +++ b/config/authtoken.go @@ -15,7 +15,7 @@ func AuthToken() string { viper.AddConfigPath("./data") err := viper.ReadInConfig() if err != nil { - log.Println("Error reading config for getting segfautils.auth_token", err.Error()) + log.Println("Error reading config. Error getting: segfautils.auth_token", err.Error()) } result := viper.GetString("segfautils.auth_token") return result diff --git a/config/hcaptchasecretkey.go b/config/hcaptchasecretkey.go index e1cedca..b4834ed 100644 --- a/config/hcaptchasecretkey.go +++ b/config/hcaptchasecretkey.go @@ -11,7 +11,7 @@ func HCaptchaSecretKey() string { viper.AddConfigPath("./data") err := viper.ReadInConfig() if err != nil { - log.Println("Error reading config for getting hcaptcha.secret_key", err.Error()) + log.Println("Error reading config. Error getting: hcaptcha.secret_key", err.Error()) } result := viper.GetString("hcaptcha.secret_key") return result diff --git a/config/hcaptchasitekey.go b/config/hcaptchasitekey.go index 599d81e..214ce6d 100644 --- a/config/hcaptchasitekey.go +++ b/config/hcaptchasitekey.go @@ -11,7 +11,7 @@ func HCaptchaSiteKey() string { viper.AddConfigPath("./data") err := viper.ReadInConfig() if err != nil { - log.Println("Error reading config for getting hcaptcha.site_key", err.Error()) + log.Println("Error reading config. Error getting: hcaptcha.site_key", err.Error()) } result := viper.GetString("hcaptcha.site_key") return result diff --git a/config/oauthclientid.go b/config/oauthclientid.go new file mode 100644 index 0000000..9aaa4e8 --- /dev/null +++ b/config/oauthclientid.go @@ -0,0 +1,18 @@ +package config + +import ( + "log" + + "github.com/spf13/viper" +) + +func OAuthClientID() string { + viper.SetConfigName("config") + viper.AddConfigPath("./data") + err := viper.ReadInConfig() + if err != nil { + log.Println("Error reading config for getting oauth.client_id", err.Error()) + } + result := viper.GetString("oauth.client_id") + return result +} diff --git a/config/oauthclientsecret.go b/config/oauthclientsecret.go new file mode 100644 index 0000000..851a267 --- /dev/null +++ b/config/oauthclientsecret.go @@ -0,0 +1,18 @@ +package config + +import ( + "log" + + "github.com/spf13/viper" +) + +func OAuthClientSecret() string { + viper.SetConfigName("config") + viper.AddConfigPath("./data") + err := viper.ReadInConfig() + if err != nil { + log.Println("Error reading config for getting oauth.client_secret", err.Error()) + } + result := viper.GetString("oauth.client_secret") + return result +} diff --git a/config/oauthredirect.go b/config/oauthredirect.go new file mode 100644 index 0000000..da32360 --- /dev/null +++ b/config/oauthredirect.go @@ -0,0 +1,18 @@ +package config + +import ( + "log" + + "github.com/spf13/viper" +) + +func OAuthRedirectURL() string { + viper.SetConfigName("config") + viper.AddConfigPath("./data") + err := viper.ReadInConfig() + if err != nil { + log.Println("Error reading config for getting oauth.redirect_url", err.Error()) + } + result := viper.GetString("oauth.redirect_url") + return result +} diff --git a/config/oauthurl.go b/config/oauthurl.go new file mode 100644 index 0000000..852f1f2 --- /dev/null +++ b/config/oauthurl.go @@ -0,0 +1,18 @@ +package config + +import ( + "log" + + "github.com/spf13/viper" +) + +func OAuthURL() string { + viper.SetConfigName("config") + viper.AddConfigPath("./data") + err := viper.ReadInConfig() + if err != nil { + log.Println("Error reading config for getting oauth.auth_url", err.Error()) + } + result := viper.GetString("oauth.auth_url") + return result +} diff --git a/config/optionannounce.go b/config/optionannounce.go new file mode 100644 index 0000000..7cb3bba --- /dev/null +++ b/config/optionannounce.go @@ -0,0 +1,18 @@ +package config + +import ( + "log" + + "github.com/spf13/viper" +) + +func OptAnn() string { + viper.SetConfigName("config") + viper.AddConfigPath("./data") + err := viper.ReadInConfig() + if err != nil { + log.Println("Error reading config. Error getting: options.announce", err.Error()) + } + result := viper.GetString("options.announce") + return result +} diff --git a/config/optionform.go b/config/optionform.go new file mode 100644 index 0000000..db2f184 --- /dev/null +++ b/config/optionform.go @@ -0,0 +1,18 @@ +package config + +import ( + "log" + + "github.com/spf13/viper" +) + +func OptForm() string { + viper.SetConfigName("config") + viper.AddConfigPath("./data") + err := viper.ReadInConfig() + if err != nil { + log.Println("Error reading config. Error getting: options.form", err.Error()) + } + result := viper.GetString("options.form") + return result +} diff --git a/config/port.go b/config/port.go index 0830001..66f57b2 100644 --- a/config/port.go +++ b/config/port.go @@ -12,7 +12,7 @@ func Port() string { viper.AddConfigPath("./data") err := viper.ReadInConfig() if err != nil { - log.Println("Error reading config for getting segfautils.port", err.Error()) + log.Println("Error reading config. Error getting: segfautils.port", err.Error()) } result := strconv.Itoa(viper.GetInt("segfautils.port")) return result diff --git a/config/webhook.go b/config/webhook.go index 6c6b03a..2324f18 100644 --- a/config/webhook.go +++ b/config/webhook.go @@ -11,7 +11,7 @@ func WebhookURL() string { viper.AddConfigPath("./data") err := viper.ReadInConfig() if err != nil { - log.Println("Error reading config for getting segfautils.webhook_url", err.Error()) + log.Println("Error reading config. Error getting: segfautils.webhook_url", err.Error()) } result := viper.GetString("segfautils.webhook_url") return result diff --git a/data/config.example.toml b/data/config.example.toml index 84aad0c..1449fd3 100644 --- a/data/config.example.toml +++ b/data/config.example.toml @@ -5,4 +5,14 @@ auth_token = "YOURAUTHTOKEN" [hcaptcha] site_key = "YOURSITEKEY" -secret_key = "YOURSECRETKEY" \ No newline at end of file +secret_key = "YOURSECRETKEY" + +[oauth] +client_id = "YOURCLIENTID" +client_secret = "YOURCLIENTSECRET" +redirect_url = "YOURREDIRECTURL" +auth_url = "YOURAUTHURL" + +[options] +announce = true +form = false diff --git a/data/lol.toml b/data/lol.toml new file mode 100644 index 0000000..940a54b --- /dev/null +++ b/data/lol.toml @@ -0,0 +1,8 @@ +[segfautils] +port = 6893 +webhook_url = "https://127.0.0.1:8080/segfautils" +auth_token = "121212" + +[hcaptcha] +site_key = "lol" +secret_key = "lol2" diff --git a/go.mod b/go.mod index 07e44b4..6e424a5 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.18 require ( github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/goccy/go-json v0.9.10 // indirect + github.com/golang/protobuf v1.5.2 // indirect github.com/gorilla/feeds v1.1.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/kataras/hcaptcha v0.0.0-20200711031247-2927d4faf32f // indirect @@ -18,8 +19,12 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.12.0 // indirect github.com/subosito/gotenv v1.3.0 // indirect + golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect + golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 //indirect golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect golang.org/x/text v0.3.7 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 45f95d5..f22f5d3 100644 --- a/go.sum +++ b/go.sum @@ -86,6 +86,9 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -97,6 +100,7 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -244,6 +248,8 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -253,6 +259,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -388,6 +396,7 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -451,6 +460,10 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= diff --git a/main.go b/main.go index a5a5ca8..14384b3 100644 --- a/main.go +++ b/main.go @@ -12,18 +12,13 @@ import ( ) type StaticThingy struct { - Port string - HCaptchaSiteKey string + Port string } -var port string -var shit bool - func main() { log.Println("[Segfautils] Starting") utils.CheckConfig() - log.Println("[HTTP] Starting server") - hcaptcha_site_key := config.HCaptchaSiteKey() + tmpl := template.Must(template.ParseFiles("static/index.html")) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { data := StaticThingy{ @@ -32,22 +27,14 @@ func main() { tmpl.Execute(w, data) }) - tmpl_form := template.Must(template.ParseFiles("static/form.html")) - http.HandleFunc("/form/", func(w http.ResponseWriter, r *http.Request) { - data := StaticThingy{ - HCaptchaSiteKey: hcaptcha_site_key, - } - tmpl_form.Execute(w, data) - }) + log.Println("[HTTP] Starting server") + api.AnnCheck() + api.FormCheck() http.HandleFunc("/api/", func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "welcome to hell") }) - http.HandleFunc("/announcements", func(w http.ResponseWriter, r *http.Request) { - http.ServeFile(w, r, "static/announcements.html") - }) - api.Form() - api.Announcements() + log.Println("[HTTP] HTTP server is now running at " + config.Port() + "!") log.Println(http.ListenAndServe(":"+config.Port(), nil)) } diff --git a/readme.md b/readme.md index f55bbc9..b7c63f1 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ Web utilities for Project Segfault ## What does it do? -For now it powers our contact form. In the future we will expand our APIs so you can do more cool things. +For now it powers our contact form and our announcements page. In the future we will expand our APIs so you can do more cool things. (We currently do not have any new idea so please open issues and give us suggestions!!) ## Setup @@ -20,8 +20,8 @@ If you're using Portainer, you should know how to add Segfautils. ``` git clone https://github.com/ProjectSegfault/segfautils cd segfautils/ -# You need to add the environment HCAPTCHA_SITE_KEY, HCAPTCHA_SECRET_KEY, SEGFAUTILS_WEBHOOK_URL and SEGFAUTILS_PORT. +# You need to config file located in data/config.toml. go run main.go # Run this when you've done above, and you're planning on developing, if not, do below go build . -o segfautils ./segfautils -``` \ No newline at end of file +``` diff --git a/utils/checkconfig.go b/utils/checkconfig.go index 34e1088..ca7911d 100644 --- a/utils/checkconfig.go +++ b/utils/checkconfig.go @@ -2,37 +2,78 @@ package utils import ( - "log" + "fmt" + "os" +) - "github.com/ProjectSegfault/segfautils/config" +var ( + is = 0 + arrName = [9]string{"Port", "Authentication token", "Webhook URL", "HCaptcha secret", "Hcaptcha site key", "OAuth client ID", "OAuth client secret", "OAuth redirect URL", "OAuth athentication URL"} + arrCfg = [9]string{"0", "YOURAUTHTOKEN", "YOURWEBHOOKURL", "YOURSECRETKEY", "YOURSITEKEY", "YOURCLIENTID", "YOURCLIENTSECRET", "YOURREDIRECTURL", "YOURAUTHURL"} + testCfg = [9]string{"config.Authtoken()", "config.WebhookURL()", "config.HCaptchaSecretKey()", "config.HCaptchaSiteKey()", "config.OAuthClientID()", "config.OAuthClientSecret()", "config.OAuthRedirectURL()", "config.OAuthURL()"} ) func CheckConfig() { - if config.Port() == "0" { - log.Fatal("[Segfautils] ❌ You need to set the port you'd like to use in the config file. Check documentation for more information.") - } else { - log.Println("[Segfautils] ✅ segfautils.port is set to", config.Port()) - } - if config.AuthToken() == "YOURAUTHTOKEN" || config.AuthToken() == "" { - log.Fatal("[Segfautils] ❌ You need to set the authentication token you'd like to use in the config file. Check documentation for more information.") - } else { - log.Println("[Segfautils] ✅ segfautils.auth_token is set!") - } - if config.WebhookURL() == "YOURWEBHOOKURL" || config.WebhookURL() == "" { - log.Fatal("[Segfautils] ❌ You need to set the Webhook URL you'd like to use in the config file. Check documentation for more information.") - } else { - log.Println("[Segfautils] ✅ segfautils.webhook_url is set!") - } - // Hcaptcha stuff - if config.HCaptchaSecretKey() == "YOURSECRETKEY" || config.HCaptchaSecretKey() == "" { - log.Fatal("[Segfautils] ❌ You need to set the HCaptcha secret you'd like to use in the config file. Check documentation for more information.") - } else { - log.Println("[Segfautils] ✅ segfautils.hcaptcha_secret is set!") + + for i := 0; i < 8; i++ { + if testCfg[i] == arrCfg[i] || testCfg[i] == "" { + fmt.Println(arrCfg[i]) + is = i + Fail() + } else { + fmt.Println(arrCfg[i]) + fmt.Println(testCfg[i]) + is = i + Check() + } } - if config.HCaptchaSiteKey() == "YOURSITEKEY" || config.HCaptchaSiteKey() == "" { - log.Println("[Segfautils] ⚠️ The HCaptcha site key isn't set. You don't have to, but the demo form will not work without it. Check documentation for more information.") - } else { - log.Println("[Segfautils] ✅ hcaptcha.site_key is set!") +} + +/* + func CheckConfig() { + if config.Port() == "0" { + Fail() + } else { + Check() + } + if config.AuthToken() == "YOURAUTHTOKEN" || config.AuthToken() == "" { + log.Fatal("[Segfautils] ❌ You need to set the authentication token you'd like to use in the config file. Check documentation for more information.") + } else { + log.Println("[Segfautils] ✅ segfautils.auth_token is set!") + } + if config.WebhookURL() == "YOURWEBHOOKURL" || config.WebhookURL() == "" { + log.Fatal("[Segfautils] ❌ You need to set the Webhook URL you'd like to use in the config file. Check documentation for more information.") + } else { + log.Println("[Segfautils] ✅ segfautils.webhook_url is set!") + } + // Hcaptcha stuff + if config.HCaptchaSecretKey() == "YOURSECRETKEY" || config.HCaptchaSecretKey() == "" { + log.Fatal("[Segfautils] ❌ You need to set the HCaptcha secret you'd like to use in the config file. Check documentation for more information.") + } else { + log.Println("[Segfautils] ✅ segfautils.hcaptcha_secret is set!") + } + if config.HCaptchaSiteKey() == "YOURSITEKEY" || config.HCaptchaSiteKey() == "" { + log.Println("[Segfautils] ⚠️ The HCaptcha site key isn't set. You don't have to, but the demo form will not work without it. Check documentation for more information.") + } else { + log.Println("[Segfautils] ✅ hcaptcha.site_key is set!") + } + log.Println("[segfautils] ✅ All config checks passed!") + log.Println("[segfautils] ✅ Listening at port ", config.Port()) } - log.Println("[Segfautils] ✅ All config checks passed!") +*/ +func Check() { + fmt.Printf("[Segfautils] ✅ %s is set!\n", arrName[is]) +} + +func Fail() { + fmt.Printf("[Segfautils] ❌ You need to set the %s you'd like to use in the config file. Check documentation for more information.\n", arrName[is]) + os.Exit(Error()) +} + +func OptionalFail() { + fmt.Printf("[Segfautils] ⚠️ The %s isn't set. You don't have to, but the program will not be able to behave correctly. Check documentation for more information.\n", arrName[is]) +} + +func Error() int { + return 12 }