diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2e79155..0000000 --- a/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM alpine:latest - -COPY nodebb_invite_link /usr/local/bin/ - -VOLUME /var/lib/nodebb_invite_link -EXPOSE 9876 - -ENV DOMAIN "" -ENV "INVITE_LISTEN" 9876 -ENV "INVITE_SEQ" "/var/lib/nodebb_invite_link/sequence" - -ENV "INVITE_DBHOST" "postgres" -ENV "INVITE_DBPORT" 5432 -ENV "INVITE_DBNAME" "nodebb" -ENV "INVITE_DBUSERNAME" "nodebb" -ENV "INVITE_DBPASSWORD" "nodebb" - -CMD ["/usr/local/bin/nodebb_invite_link"] diff --git a/db.go b/db.go index 7a67f96..cd4576f 100644 --- a/db.go +++ b/db.go @@ -22,6 +22,7 @@ func initDB(host string, port int, dbName, username, password string) (err error password, dbName, ) + if db, err = sqlx.Connect("postgres", dbConn); err != nil { return } diff --git a/main.go b/main.go index 458f703..f161df2 100644 --- a/main.go +++ b/main.go @@ -26,49 +26,23 @@ var ( flagDatabase string flagListenPort int flagSequenceFilename string - flagDomain string + flagDomain string ) func init() { - var err error - - port := 5432 - if os.Getenv("INVITE_DBPORT") != "" { - port, err = strconv.Atoi(os.Getenv("INVITE_DBPORT")) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - } - - listen := 9876 - if os.Getenv("INVITE_LISTEN") != "" { - listen, err = strconv.Atoi(os.Getenv("INVITE_LISTEN")) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - } - flag.BoolVar(&flagVersion, "version", false, "Display version and exit") - flag.StringVar(&flagHost, "host", os.Getenv("INVITE_DBHOST"), "Database host") - flag.StringVar(&flagUsername, "username", os.Getenv("INVITE_DBUSERNAME"), "Database username") - flag.StringVar(&flagPassword, "password", os.Getenv("INVITE_DBPASSWORD"), "Database password") - flag.StringVar(&flagDatabase, "database", os.Getenv("INVITE_DBNAME"), "Database name") - flag.IntVar(&flagPort, "port", port, "Database port") - flag.IntVar(&flagListenPort, "listen", listen, "Web server listen port") - flag.StringVar(&flagSequenceFilename, "seq", os.Getenv("INVITE_SEQ"), "Sequence filename") - flag.StringVar(&flagDomain, "domain", os.Getenv("INVITE_DOMAIN"), "Domain FQDN") + flag.StringVar(&flagHost, "host", "", "Database host") + flag.StringVar(&flagUsername, "username", "", "Database username") + flag.StringVar(&flagPassword, "password", "", "Database password") + flag.StringVar(&flagDatabase, "database", "", "Database name") + flag.IntVar(&flagPort, "port", 5432, "Database port") + flag.IntVar(&flagListenPort, "listen", 9876, "Web server listen port") + flag.StringVar(&flagSequenceFilename, "seq", "sequence", "Sequence filename") + flag.StringVar(&flagDomain, "domain", "", "Domain FQDN") flag.Parse() } func main() { - if flagSequenceFilename == "" { - fmt.Println("Please specify -seq with a sequenc filename.") - os.Exit(1) - } - - err := initDB(flagHost, flagPort, flagDatabase, flagUsername, flagPassword) if err != nil { fmt.Println(err) @@ -76,7 +50,6 @@ func main() { } listenOn := fmt.Sprintf("[::]:%d", flagListenPort) - http.HandleFunc("/", pageIndex) http.HandleFunc("/invite", createInvite) fmt.Printf("Listen on %s\n", listenOn) err = http.ListenAndServe(listenOn, nil) @@ -109,50 +82,6 @@ func sequenceNext() (seq int, err error) { return } -func pageIndex(w http.ResponseWriter, r *http.Request) { - w.Write([]byte(` - - - - - - -
-
Skapar länk...
- - - - - - -`)) -} - func createInvite(w http.ResponseWriter, r *http.Request) { seq, err := sequenceNext() if err != nil { @@ -164,59 +93,57 @@ func createInvite(w http.ResponseWriter, r *http.Request) { email := fmt.Sprintf("%08d@example.com", seq) expire := time.Now().Add(time.Hour * 24 * 7) - if false { - // legacy_object - key := fmt.Sprintf("invitation:uid:2:invited:%s", email) - _, err = db.Exec(` INSERT INTO public.legacy_object(_key, "type", "expireAt") VALUES($1, 'string', null)`, key) - if err != nil { - w.Write([]byte(err.Error())) - return - } + // legacy_object + key := fmt.Sprintf("invitation:uid:2:invited:%s", email) + _, err = db.Exec(` INSERT INTO public.legacy_object(_key, "type", "expireAt") VALUES($1, 'string', null)`, key) + if err != nil { + w.Write([]byte(err.Error())) + return + } - key = fmt.Sprintf("invitation:invited:%s", email) - _, err = db.Exec(` INSERT INTO public.legacy_object(_key, "type", "expireAt") VALUES($1, 'set', null)`, key) - if err != nil { - w.Write([]byte(err.Error())) - return - } + key = fmt.Sprintf("invitation:invited:%s", email) + _, err = db.Exec(` INSERT INTO public.legacy_object(_key, "type", "expireAt") VALUES($1, 'set', null)`, key) + if err != nil { + w.Write([]byte(err.Error())) + return + } - key = fmt.Sprintf("invitation:token:%s", newUUID) - _, err = db.Exec(` INSERT INTO public.legacy_object(_key, "type", "expireAt") VALUES($1, 'hash', $2)`, key, expire) - if err != nil { - w.Write([]byte(err.Error())) - return - } + key = fmt.Sprintf("invitation:token:%s", newUUID) + _, err = db.Exec(` INSERT INTO public.legacy_object(_key, "type", "expireAt") VALUES($1, 'hash', $2)`, key, expire) + if err != nil { + w.Write([]byte(err.Error())) + return + } - // legacy_hash - key = fmt.Sprintf("invitation:token:%s", newUUID) - data := fmt.Sprintf(`{"email": "%s", "token": "%s", "inviter": 2, "groupsToJoin": "[]"}`, email, newUUID) - _, err = db.Exec(` INSERT INTO public.legacy_hash(_key, "data", "type") VALUES($1, $2, 'hash')`, key, data) - if err != nil { - w.Write([]byte(err.Error())) - return - } + // legacy_hash + key = fmt.Sprintf("invitation:token:%s", newUUID) + data := fmt.Sprintf(`{"email": "%s", "token": "%s", "inviter": 2, "groupsToJoin": "[]"}`, email, newUUID) + _, err = db.Exec(` INSERT INTO public.legacy_hash(_key, "data", "type") VALUES($1, $2, 'hash')`, key, data) + if err != nil { + w.Write([]byte(err.Error())) + return + } - // legacy_set - key = "invitation:uid:2" - _, err = db.Exec(` INSERT INTO public.legacy_set(_key, "member", "type") VALUES($1, $2, 'set')`, key, email) - if err != nil { - w.Write([]byte(err.Error())) - return - } + // legacy_set + key = fmt.Sprintf("invitation:uid:2") + _, err = db.Exec(` INSERT INTO public.legacy_set(_key, "member", "type") VALUES($1, $2, 'set')`, key, email) + if err != nil { + w.Write([]byte(err.Error())) + return + } - key = fmt.Sprintf("invitation:invited:%s", email) - _, err = db.Exec(` INSERT INTO public.legacy_set(_key, "member", "type") VALUES($1, $2, 'set')`, key, newUUID) - if err != nil { - w.Write([]byte(err.Error())) - return - } + key = fmt.Sprintf("invitation:invited:%s", email) + _, err = db.Exec(` INSERT INTO public.legacy_set(_key, "member", "type") VALUES($1, $2, 'set')`, key, newUUID) + if err != nil { + w.Write([]byte(err.Error())) + return + } - key = fmt.Sprintf("invitation:uid:2:invited:%s", email) - _, err = db.Exec(` INSERT INTO public.legacy_string(_key, "data", "type") VALUES($1, $2, 'string')`, key, newUUID) - if err != nil { - w.Write([]byte(err.Error())) - return - } + key = fmt.Sprintf("invitation:uid:2:invited:%s", email) + _, err = db.Exec(` INSERT INTO public.legacy_string(_key, "data", "type") VALUES($1, $2, 'string')`, key, newUUID) + if err != nil { + w.Write([]byte(err.Error())) + return } j, _ := json.Marshal(struct { @@ -225,4 +152,6 @@ func createInvite(w http.ResponseWriter, r *http.Request) { fmt.Sprintf("https://%s/register?token=%s", flagDomain, newUUID), }) w.Write(j) + + return }