git-svn-id: svn://losandesgames.com/alfheim-website@10 15359d88-9307-4e75-a9c1-e5686e5897df
124 lines
3.0 KiB
Go
124 lines
3.0 KiB
Go
//
|
|
// Created by vfs on 02.05.2024.
|
|
//
|
|
|
|
package main
|
|
|
|
import "fmt"
|
|
import "log"
|
|
import "flag"
|
|
import "net/http"
|
|
import _ "github.com/lib/pq"
|
|
import "database/sql"
|
|
import "github.com/gorilla/sessions"
|
|
import "regexp"
|
|
//import "golang.org/x/crypto/bcrypt"
|
|
|
|
import "github.com/stripe/stripe-go/v78"
|
|
import "github.com/stripe/stripe-go/v78/customer"
|
|
|
|
var users *Usermodel
|
|
|
|
var key = []byte("super-secret-key")
|
|
var store = sessions.NewCookieStore(key)
|
|
|
|
var emailrx = regexp.MustCompile("/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/")
|
|
|
|
func secure_headers(next http.Handler) http.Handler {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("X-XSS-Protection", "1; mode=block")
|
|
w.Header().Set("X-Frame-Options", "deny")
|
|
|
|
next.ServeHTTP(w, r)
|
|
}
|
|
|
|
return http.HandlerFunc(fn)
|
|
}
|
|
|
|
func require_authenticated_user(next http.HandlerFunc) http.HandlerFunc {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
// If the user is not authenticated, redirect them to the login page and
|
|
// return from the middleware chain so that no subsequent handlers in
|
|
// the chain are executed.
|
|
if authenticated_user(r) == 0 {
|
|
http.Redirect(w, r, "/login", http.StatusSeeOther)
|
|
return
|
|
}
|
|
// Otherwise call the next handler in the chain.
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
|
|
func main() {
|
|
addr := flag.String("addr", ":8080", "HTTP network address")
|
|
flag.Parse()
|
|
fmt.Println("Hello, Sailor!")
|
|
|
|
stripe.Key = "sk_test_51PGebgKUHKCjyTmc97rfDPcvew6EhqDz2qp3U7XoAMIilAU9IVo2NO4P7ylkTvbBafFVr94trha1VYY32jRWMw2K00Yq7YJXFf"
|
|
|
|
c, _ := customer.Get("cus_Q7am78hLcLUvGQ", nil)
|
|
|
|
fmt.Println(c)
|
|
|
|
store.MaxAge(0)
|
|
|
|
db, err := sql.Open("postgres", "postgres://elves_database:iK2SoVbDhdCki5n3LxGyP6zKpLspt4@80.240.25.87/elves_database")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer db.Close()
|
|
|
|
users = &Usermodel{db}
|
|
|
|
mux := http.NewServeMux()
|
|
|
|
|
|
//rows, err := db.Query("SELECT * FROM accounts")
|
|
//if err != nil {
|
|
// log.Fatal(err)
|
|
//}
|
|
//defer rows.Close()
|
|
|
|
//accounts := make([]*Account, 0)
|
|
//for rows.Next() {
|
|
// acc := new(Account)
|
|
// err := rows.Scan(&acc.id, &acc.Username, &acc.password, &acc.Color)
|
|
// if err != nil {
|
|
// log.Fatal(err)
|
|
// }
|
|
// accounts = append(accounts, acc)
|
|
//}
|
|
|
|
//if err = rows.Err(); err != nil {
|
|
// log.Fatal(err)
|
|
//}
|
|
|
|
//for _, acc := range accounts {
|
|
// fmt.Println(acc)
|
|
//}
|
|
|
|
mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
|
|
|
|
mux.HandleFunc("/favicon.ico", favicon)
|
|
|
|
mux.HandleFunc("/", home)
|
|
mux.HandleFunc("/login", login)
|
|
mux.HandleFunc("/logout", logout)
|
|
mux.HandleFunc("/register", register)
|
|
mux.HandleFunc("/account", require_authenticated_user(account))
|
|
|
|
|
|
|
|
log.Fatal(http.ListenAndServe(*addr, secure_headers(mux)))
|
|
}
|
|
|
|
//cookie := http.Cookie{
|
|
// Name: "exampleCookie",
|
|
// Value: "Hello world!",
|
|
// Path: "/",
|
|
// HttpOnly: true,
|
|
// Secure: true,
|
|
// SameSite: http.SameSiteLaxMode,
|
|
//}
|
|
//http.SetCookie(w, &cookie)
|