github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/plugin/basic/cassandra_repository.go (about) 1 package basic 2 3 import ( 4 "github.com/hellofresh/janus/cassandra/wrapper" 5 "github.com/hellofresh/janus/pkg/plugin/basic/encrypt" 6 log "github.com/sirupsen/logrus" 7 ) 8 9 // CassandraRepository represents a cassandra repository 10 type CassandraRepository struct { 11 session wrapper.Holder 12 hash encrypt.Hash 13 } 14 15 func NewCassandraRepository(session wrapper.Holder) (*CassandraRepository, error) { 16 log.Debugf("getting new basic cassandra repo") 17 return &CassandraRepository{session: session, hash: encrypt.Hash{}}, nil 18 19 } 20 21 // FindAll fetches all the basic user definitions available 22 func (r *CassandraRepository) FindAll() ([]*User, error) { 23 log.Debugf("finding all users servers") 24 25 var results []*User 26 27 iter := r.session.GetSession().Query("SELECT username, password FROM user").Iter() 28 29 var username string 30 var password string 31 32 err := iter.ScanAndClose(func() bool { 33 var user User 34 user.Username = username 35 user.Password = password 36 results = append(results, &user) 37 return true 38 }, &username, &password) 39 40 if err != nil { 41 log.Errorf("error getting all oauths: %v", err) 42 } 43 return results, err 44 45 } 46 47 // FindByUsername find an user by username 48 // returns ErrUserNotFound when a user is not found. 49 func (r *CassandraRepository) FindByUsername(username string) (*User, error) { 50 log.Debugf("finding: %s", username) 51 52 var user User 53 54 err := r.session.GetSession().Query( 55 "SELECT username, password " + 56 "FROM user " + 57 "WHERE username = ?", 58 username).Scan(&user.Username, &user.Password) 59 60 if err.Error() == "not found"{ 61 log.Debugf("user not found") 62 err = ErrUserNotFound 63 } else if err != nil { 64 log.Errorf("error selecting user %s: %v", username, err) 65 } else { 66 log.Debugf("successfully found user %s", username) 67 } 68 69 return &user, err 70 } 71 72 // Add adds an user to the repository 73 func (r *CassandraRepository) Add(user *User) error { 74 log.Debugf("adding: %s", user.Username) 75 76 hash, err := r.hash.Generate(user.Password) 77 if err != nil { 78 log.Errorf("error hashing password: %v", err) 79 return err 80 } 81 82 err = r.session.GetSession().Query( 83 "UPDATE user " + 84 "SET password = ? " + 85 "WHERE username = ?", 86 hash, user.Username).Exec() 87 88 if err != nil { 89 log.Errorf("error saving user %s: %v", user.Username, err) 90 } else { 91 log.Debugf("successfully saved user %s", user.Username) 92 } 93 94 return err 95 } 96 97 // Remove an user from the repository 98 func (r *CassandraRepository) Remove(username string) error { 99 log.Debugf("removing: %s", username) 100 101 err := r.session.GetSession().Query( 102 "DELETE FROM user WHERE username = ?", username).Exec() 103 104 if err != nil { 105 log.Errorf("error removing user %s: %v", username, err) 106 } else { 107 log.Debugf("successfully removed user %s", username) 108 } 109 110 return err 111 }