github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/passwords/passwords.go (about) 1 package passwords 2 3 import ( 4 "database/sql" 5 "fmt" 6 7 "github.com/benoitkugler/goACVE/logs" 8 "github.com/benoitkugler/goACVE/server/shared" 9 "github.com/labstack/echo" 10 ) 11 12 type Controller struct { 13 DB *sql.DB 14 } 15 16 func auth(c echo.Context) error { 17 if key := c.Param("key"); key != logs.KeyAdminPasswords { 18 return fmt.Errorf("Le lien de connection est invalide : %s", key) 19 } 20 return nil 21 } 22 23 func PagePasswords(c echo.Context) error { 24 return c.File("server/static/bv/passwords.html") 25 } 26 27 func (passs Passwords) Publie() (GetPasswordsOut, error) { 28 out := make(GetPasswordsOut, len(passs)) 29 for id, pass := range passs { 30 ppa, err := pass.Publie() 31 if err != nil { 32 return nil, err 33 } 34 out[id] = ppa 35 } 36 return out, nil 37 } 38 39 func (ct Controller) GetPasswords(c echo.Context) error { 40 if err := auth(c); err != nil { 41 return err 42 } 43 passs, err := SelectAllPasswords(ct.DB) 44 if err != nil { 45 return err 46 } 47 // on décrypte 48 out, err := passs.Publie() 49 if err != nil { 50 return err 51 } 52 return c.JSON(200, out) 53 } 54 55 func (ct Controller) CreatePassword(c echo.Context) error { 56 if err := auth(c); err != nil { 57 return err 58 } 59 var ppa PublicPassword 60 if err := c.Bind(&ppa); err != nil { 61 return err 62 } 63 pa, err := ppa.Crypte() 64 if err != nil { 65 return err 66 } 67 pa, err = pa.Insert(ct.DB) 68 if err != nil { 69 return err 70 } 71 ppa, err = pa.Publie() 72 if err != nil { 73 return err 74 } 75 return c.JSON(200, ppa) 76 } 77 78 func (ct Controller) UpdatePassword(c echo.Context) error { 79 if err := auth(c); err != nil { 80 return err 81 } 82 var ppa PublicPassword 83 if err := c.Bind(&ppa); err != nil { 84 return err 85 } 86 pa, err := ppa.Crypte() 87 if err != nil { 88 return err 89 } 90 pa, err = pa.Update(ct.DB) 91 if err != nil { 92 return err 93 } 94 ppa, err = pa.Publie() 95 if err != nil { 96 return err 97 } 98 return c.JSON(200, ppa) 99 } 100 101 func (ct Controller) DeletePassword(c echo.Context) error { 102 if err := auth(c); err != nil { 103 return err 104 } 105 id, err := shared.ParseId(c, "id") 106 if err != nil { 107 return err 108 } 109 _, err = Password{BasePassword: BasePassword{Id: id}}.Delete(ct.DB) 110 if err != nil { 111 return err 112 } 113 return c.NoContent(200) 114 } 115 116 func (pa Password) Publie() (PublicPassword, error) { 117 decrypted, err := logs.PasswordCrypteur.Decrypt(pa.PasswordCrypted) 118 return PublicPassword{BasePassword: pa.BasePassword, Password: string(decrypted)}, err 119 } 120 121 func (ppa PublicPassword) Crypte() (Password, error) { 122 crypted, err := logs.PasswordCrypteur.Encrypt([]byte(ppa.Password)) 123 return Password{BasePassword: ppa.BasePassword, PasswordCrypted: crypted}, err 124 }