Struttura di base, templating e interfaccia per il servizio di autenticazione

main-old
Antonio De Lucreziis 5 years ago
parent bffe3056f7
commit aa21c64880

@ -5,13 +5,16 @@
box-sizing: border-box; box-sizing: border-box;
} }
html {
position: relative;
}
html, html,
body { body {
margin: 0; margin: 0;
min-height: 100vh; min-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
position: relative;
font-family: 'Sen'; font-family: 'Sen';
} }
@ -22,7 +25,8 @@ h1, h2, h3, h4 {
} }
body { body {
max-width: 50rem; max-width: 100%;
width: 50rem;
margin: 0 auto; margin: 0 auto;
padding: 0 0.5em; padding: 0 0.5em;
} }
@ -63,6 +67,7 @@ body > div:last-of-type {
footer { footer {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 0;
width: 100%; width: 100%;
height: 3em; height: 3em;
display: flex; display: flex;

@ -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}}

@ -1,43 +1,8 @@
<!DOCTYPE html> {{template "base" .}}
<html lang="en">
<head> {{define "title"}}Poisson{{end}}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHC</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>
<div class="hfill"></div>
<!-- User -->
<div class="nav-item">
<a href="/login">Login</a>
</div>
</nav>
{{define "body"}}
<h1>Poisson</h1> <h1>Poisson</h1>
<h2>Macchinisti</h2> <h2>Macchinisti</h2>
@ -75,10 +40,4 @@
</div> </div>
</article> </article>
</div> </div>
{{end}}
<footer>
&copy; macchinisti@poisson.phc.dm.unipi.it
</footer>
</body>
</html>

@ -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…
Cancel
Save