Initial commit
This commit is contained in:
commit
8421c6999a
10 changed files with 1794 additions and 0 deletions
198
main.go
Normal file
198
main.go
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// User struktura za uporabniške podatke
|
||||
type User struct {
|
||||
ID int
|
||||
Username string
|
||||
Password string
|
||||
Email string
|
||||
FullName string
|
||||
}
|
||||
|
||||
// In-memory shranjevanje uporabnikov
|
||||
var (
|
||||
users = make(map[string]*User)
|
||||
usersMux = &sync.RWMutex{}
|
||||
lastID = 0
|
||||
)
|
||||
|
||||
// Template cache
|
||||
var templates *template.Template
|
||||
|
||||
func init() {
|
||||
// Privzeti uporabniki
|
||||
addUser("jnovak", "secure123", "janez.novak@securebank.si", "Janez Novak")
|
||||
addUser("mpetric", "banking456", "maja.petric@securebank.si", "Maja Petrič")
|
||||
}
|
||||
|
||||
func addUser(username, password, email, fullName string) {
|
||||
usersMux.Lock()
|
||||
defer usersMux.Unlock()
|
||||
lastID++
|
||||
users[username] = &User{
|
||||
ID: lastID,
|
||||
Username: username,
|
||||
Password: password,
|
||||
Email: email,
|
||||
FullName: fullName,
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
// Nastavimo port preko command line argumenta
|
||||
var port = flag.String("port", "8080", "Port na katerem se bo zagnal server")
|
||||
flag.Parse()
|
||||
|
||||
// Naložimo HTML predloge
|
||||
var err error
|
||||
templates, err = template.ParseGlob("templates/*.html")
|
||||
if err != nil {
|
||||
log.Fatal("Napaka pri nalaganju predlog:", err)
|
||||
}
|
||||
|
||||
// Statične datoteke (CSS)
|
||||
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static/"))))
|
||||
|
||||
// Routes
|
||||
http.HandleFunc("/", homeHandler)
|
||||
http.HandleFunc("/register", registerHandler)
|
||||
http.HandleFunc("/login", loginHandler)
|
||||
http.HandleFunc("/dashboard", dashboardHandler)
|
||||
http.HandleFunc("/logout", logoutHandler)
|
||||
|
||||
// Zagon strežnika
|
||||
fmt.Printf("SecureBank aplikacija se zaganja na portu %s\n", *port)
|
||||
fmt.Printf("Dostop: http://localhost:%s\n", *port)
|
||||
|
||||
serverAddr := ":" + *port
|
||||
log.Fatal(http.ListenAndServe(serverAddr, nil))
|
||||
}
|
||||
|
||||
func homeHandler(w http.ResponseWriter, r *http.Request) {
|
||||
templates.ExecuteTemplate(w, "home.html", nil)
|
||||
}
|
||||
|
||||
func registerHandler(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == "GET" {
|
||||
templates.ExecuteTemplate(w, "register.html", nil)
|
||||
return
|
||||
}
|
||||
|
||||
if r.Method == "POST" {
|
||||
username := r.FormValue("username")
|
||||
password := r.FormValue("password")
|
||||
email := r.FormValue("email")
|
||||
fullName := r.FormValue("fullName")
|
||||
|
||||
//Validacija
|
||||
if username == "" || password == "" || email == "" || fullName == "" {
|
||||
templates.ExecuteTemplate(w, "register.html", map[string]string{
|
||||
"Error": "Vsa polja so obvezna!",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Preverimo če uporabnik že obstaja
|
||||
usersMux.RLock()
|
||||
_, exists := users[username]
|
||||
usersMux.RUnlock()
|
||||
|
||||
if exists {
|
||||
templates.ExecuteTemplate(w, "register.html", map[string]string{
|
||||
"Error": "Uporabniško ime že obstaja!",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Dodamo novega uporabnika
|
||||
addUser(username, password, email, fullName)
|
||||
|
||||
// Preusmeri na prijavo
|
||||
http.Redirect(w, r, "/login?registered=1", http.StatusSeeOther)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func loginHandler(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == "GET" {
|
||||
data := map[string]string{}
|
||||
if r.URL.Query().Get("registered") == "1" {
|
||||
data["Success"] = "Registracija je bila uspešna! Sedaj se lahko prijavite."
|
||||
}
|
||||
templates.ExecuteTemplate(w, "login.html", data)
|
||||
return
|
||||
}
|
||||
|
||||
if r.Method == "POST" {
|
||||
username := r.FormValue("username")
|
||||
password := r.FormValue("password")
|
||||
|
||||
// Preverimo podatke
|
||||
usersMux.RLock()
|
||||
user, exists := users[username]
|
||||
usersMux.RUnlock()
|
||||
|
||||
if !exists || user.Password != password {
|
||||
templates.ExecuteTemplate(w, "login.html", map[string]string{
|
||||
"Error": "Napačno uporabniško ime ali geslo!",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Uspešna prijava - preusmeri na dashboard
|
||||
// POZOR: Brez session management za demo!
|
||||
http.Redirect(w, r, "/dashboard?user="+username, http.StatusSeeOther)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func dashboardHandler(w http.ResponseWriter, r *http.Request) {
|
||||
username := r.URL.Query().Get("user")
|
||||
if username == "" {
|
||||
http.Redirect(w, r, "/login", http.StatusSeeOther)
|
||||
return
|
||||
}
|
||||
|
||||
usersMux.RLock()
|
||||
user, exists := users[username]
|
||||
usersMux.RUnlock()
|
||||
|
||||
if !exists {
|
||||
http.Redirect(w, r, "/login", http.StatusSeeOther)
|
||||
return
|
||||
}
|
||||
|
||||
// Simuliramo "bančne" podatke
|
||||
accounts := []map[string]interface{}{
|
||||
{
|
||||
"Name": "Glavni račun",
|
||||
"Number": "SI56 1234 5678 9012 345",
|
||||
"Balance": "€2,456.78",
|
||||
},
|
||||
{
|
||||
"Name": "Varčevalni račun",
|
||||
"Number": "SI56 1234 5678 9012 999",
|
||||
"Balance": "€15,230.45",
|
||||
},
|
||||
}
|
||||
|
||||
data := map[string]interface{}{
|
||||
"User": user,
|
||||
"Accounts": accounts,
|
||||
}
|
||||
|
||||
templates.ExecuteTemplate(w, "dashboard.html", data)
|
||||
}
|
||||
|
||||
func logoutHandler(w http.ResponseWriter, r *http.Request) {
|
||||
http.Redirect(w, r, "/", http.StatusSeeOther)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue