Struttura di base, templating e interfaccia per il servizio di autenticazione
parent
bffe3056f7
commit
aa21c64880
@ -0,0 +1,53 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AuthenticationService è l'interfaccia del servizio di autenticazione sul server principale
|
||||||
|
type AuthenticationService struct {
|
||||||
|
URL string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewAuthenticationService crea un nuovo servizio di autenticazione e controlla se è attivo
|
||||||
|
func NewAuthenticationService(url string) (*AuthenticationService, error) {
|
||||||
|
service := new(AuthenticationService)
|
||||||
|
service.URL = url
|
||||||
|
|
||||||
|
res, err := service.Get("status")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
status, _ := ioutil.ReadAll(res.Body)
|
||||||
|
|
||||||
|
if string(status) != "online" {
|
||||||
|
log.Fatal("Authentication service isn't online, status: '%s'", status)
|
||||||
|
}
|
||||||
|
|
||||||
|
return service, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get ...
|
||||||
|
func (service *AuthenticationService) Get(url string) (*http.Response, error) {
|
||||||
|
return http.Get(service.URL + "/" + url)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Authenticate ...
|
||||||
|
func (service *AuthenticationService) Authenticate(username, password string) bool {
|
||||||
|
|
||||||
|
json, _ := json.Marshal(struct {
|
||||||
|
Username, Password string
|
||||||
|
}{username, password})
|
||||||
|
|
||||||
|
res, _ := http.Post(service.URL+"/auth", "application/json", bytes.NewReader(json))
|
||||||
|
|
||||||
|
result, _ := ioutil.ReadAll(res.Body)
|
||||||
|
|
||||||
|
return string(result) == "true"
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
module phc.dm.unipi.it/aziis98/nuovo-sito-poisson
|
module phc.dm.unipi.it/server-poisson
|
||||||
|
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
|
require github.com/gorilla/mux v1.7.4 // indirect
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
||||||
|
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
@ -1,26 +1,45 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"html/template"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
func serveHome(w http.ResponseWriter, r *http.Request) {
|
// func serveHome(w http.ResponseWriter, r *http.Request) {
|
||||||
http.ServeFile(w, r, "./views/home.html")
|
// http.ServeFile(w, r, "./views/home.html")
|
||||||
|
// }
|
||||||
|
|
||||||
|
var templates = template.Must(template.ParseFiles("views/base.html"))
|
||||||
|
|
||||||
|
func newTemplateHandler(file string) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
|
t, _ := (template.Must(templates.Clone()).ParseFiles("views/" + file))
|
||||||
|
t.ExecuteTemplate(w, "base", nil)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
// Serve assets files
|
mux := http.NewServeMux()
|
||||||
fs := http.FileServer(http.Dir("./assets"))
|
|
||||||
http.Handle("/assets/", http.StripPrefix("/assets/", fs))
|
|
||||||
|
|
||||||
// Serve homepage
|
// Serve homepage
|
||||||
http.HandleFunc("/", serveHome)
|
homeTmpl := newTemplateHandler("home.html")
|
||||||
|
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
|
||||||
|
if req.URL.Path == "/" {
|
||||||
|
homeTmpl.ServeHTTP(w, req)
|
||||||
|
} else {
|
||||||
|
http.NotFound(w, req)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
mux.Handle("/utenti", newTemplateHandler("utenti.html"))
|
||||||
|
mux.Handle("/login", newTemplateHandler("login.html"))
|
||||||
|
|
||||||
|
// Serve assets files
|
||||||
|
fs := http.FileServer(http.Dir("./assets"))
|
||||||
|
mux.Handle("/assets/", http.StripPrefix("/assets", fs))
|
||||||
|
|
||||||
log.Println("Listening on :8000...")
|
log.Println("Listening on :8000...")
|
||||||
err := http.ListenAndServe(":8000", nil)
|
log.Fatal(http.ListenAndServe(":8000", mux))
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
{{define "base"}}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>{{template "title" .}}</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assets/style.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<!-- Site -->
|
||||||
|
<div class="nav-item">
|
||||||
|
<a href="/">Poisson</a>
|
||||||
|
</div>
|
||||||
|
<div class="nav-item">
|
||||||
|
<a href="/utenti">Utenti</a>
|
||||||
|
</div>
|
||||||
|
<div class="nav-item">
|
||||||
|
<a href="/notizie">Notizie</a>
|
||||||
|
</div>
|
||||||
|
<div class="nav-item">
|
||||||
|
<a href="/guide">Guide</a>
|
||||||
|
</div>
|
||||||
|
<div class="nav-item">
|
||||||
|
<a href="/git">Git</a>
|
||||||
|
</div>
|
||||||
|
<div class="nav-item">
|
||||||
|
Forum
|
||||||
|
</div>
|
||||||
|
<!-- Spacing -->
|
||||||
|
<div class="hfill"></div>
|
||||||
|
<!-- User -->
|
||||||
|
{{if .User}}
|
||||||
|
<div class="nav-item">
|
||||||
|
<a href="/logout">Logout</a>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div class="nav-item">
|
||||||
|
<a href="/login">Login</a>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{template "body" .}}
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
macchinisti@poisson.phc.dm.unipi.it
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
{{end}}
|
@ -0,0 +1,20 @@
|
|||||||
|
{{template "base" .}}
|
||||||
|
|
||||||
|
{{define "title"}}Poisson - Utenti{{end}}
|
||||||
|
|
||||||
|
{{define "body"}}
|
||||||
|
<h1>Login</h1>
|
||||||
|
<p>Inserisci le tue credenziali di Poisson per accedere</p>
|
||||||
|
|
||||||
|
<form action="/login" method="post">
|
||||||
|
|
||||||
|
<label for="login-username">Username:</label>
|
||||||
|
<input type="text" name="username" id="login-username">
|
||||||
|
|
||||||
|
<label for="login-password">Password:</label>
|
||||||
|
<input type="text" name="password" id="login-password">
|
||||||
|
|
||||||
|
<input type="submit" value="Login">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{{end}}
|
@ -0,0 +1,30 @@
|
|||||||
|
{{template "base" .}}
|
||||||
|
|
||||||
|
{{define "title"}}Poisson - Utenti{{end}}
|
||||||
|
|
||||||
|
{{define "body"}}
|
||||||
|
<h1>Utenti</h1>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Persona 1</li>
|
||||||
|
<li>Persona 2</li>
|
||||||
|
<li>Persona 3</li>
|
||||||
|
<li>Persona 4</li>
|
||||||
|
<li>Persona 5</li>
|
||||||
|
<li>Persona 6</li>
|
||||||
|
<li>Persona 7</li>
|
||||||
|
<li>Persona 8</li>
|
||||||
|
<li>Persona 9</li>
|
||||||
|
<li>Persona 10</li>
|
||||||
|
<li>Persona 11</li>
|
||||||
|
<li>Persona 12</li>
|
||||||
|
<li>Persona 13</li>
|
||||||
|
<li>Persona 14</li>
|
||||||
|
<li>Persona 15</li>
|
||||||
|
<li>Persona 16</li>
|
||||||
|
<li>Persona 17</li>
|
||||||
|
<li>Persona 18</li>
|
||||||
|
<li>Persona 19</li>
|
||||||
|
<li>Persona 20</li>
|
||||||
|
</ul>
|
||||||
|
{{end}}
|
Loading…
Reference in New Issue