github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/directeurs/token.go (about) 1 package directeurs 2 3 import ( 4 "errors" 5 "fmt" 6 "strconv" 7 "time" 8 9 "github.com/benoitkugler/goACVE/server/shared" 10 ) 11 12 type tokenData struct { 13 Time time.Time 14 IdCamp int64 15 } 16 17 func (ct Controller) creeToken(idCamp int64) (string, error) { 18 t := tokenData{ 19 Time: time.Now(), 20 IdCamp: idCamp, 21 } 22 return shared.Encode(ct.Signing, t) 23 } 24 25 func (ct Controller) refreshToken(token string, idCamp int64) (newToken string, err error) { 26 var data tokenData 27 if err = shared.Decode(ct.Signing, token, &data); err != nil { 28 return "", err 29 } 30 if idCamp != data.IdCamp { 31 return "", errors.New("Token corrompu : camp invalide.") 32 } 33 diff := time.Since(data.Time) 34 if diff > DeltaToken { 35 diff = diff.Truncate(time.Second) 36 return "", fmt.Errorf("Session écoulée (dernière action il y a %s). Veuillez vous reconnecter.", diff) 37 } 38 return ct.creeToken(idCamp) 39 } 40 41 func (ct Controller) ShowTokenDev() (string, error) { 42 var idCamp int64 = 59 43 t, err := ct.creeToken(idCamp) 44 if err != nil { 45 return "", err 46 } 47 return fmt.Sprintf("Camp : %d - token : %s \n", idCamp, t), nil 48 } 49 50 type withBasicAuth interface { 51 BasicAuth() (username, password string, ok bool) 52 } 53 54 // authentifie vérifie le token et le met à jour, 55 // et renvoie l'id du camp associé 56 func (ct Controller) authentifie(req withBasicAuth) (int64, string, error) { 57 username, token, ok := req.BasicAuth() 58 if !ok { 59 return 0, "", errors.New("Champ d'authentification manquantes !") 60 } 61 idCamp, err := strconv.ParseInt(username, 10, 0) 62 if err != nil { 63 return 0, "", shared.FormatErr("Identifiant du camp invalide", err) 64 } 65 token, err = ct.refreshToken(token, idCamp) 66 if err != nil { 67 return 0, "", err 68 } 69 return idCamp, token, nil 70 }