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  }