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  }