13 Commits

Author SHA1 Message Date
GotPPay
840823cda8 base 64 decode password 2018-06-01 19:31:40 +02:00
GotPPay
3494273503 base 64 decode password 2018-06-01 19:29:17 +02:00
GotPPay
2fc6619383 complete password reset 2018-06-01 18:53:06 +02:00
GotPPay
b683e813fe add confirmation email on complete 2018-06-01 15:01:37 +02:00
GotPPay
8477c7fe9a Merge branch 'NPI-error-message-fix' into merge-1-6 2018-06-01 12:11:58 +02:00
GotPPay
1c49bebb50 fix bug 2018-06-01 12:09:08 +02:00
GotPPay
4b78235ed7 handle complete 2018-06-01 12:07:42 +02:00
GotPPay
f61c8b084d skeleton for completing reset procedure 2018-06-01 12:07:42 +02:00
GotPPay
636b1a1523 temp commit 2018-06-01 12:07:42 +02:00
GotPPay
eec4d177b1 skip token auth on password reset request 2018-06-01 12:07:42 +02:00
GotPPay
4731cfe7c2 add custom error for password reset 2018-06-01 12:07:42 +02:00
GotPPay
06ea1cb44d add password reset model ; create entry in database; send email 2018-06-01 12:07:42 +02:00
GotPPay
0e91373b55 edit self registration error message 2018-06-01 05:08:13 +02:00
8 changed files with 51 additions and 24 deletions

View File

@@ -172,6 +172,11 @@ func (s *userService) UpdateLogin(user viewmodel.User) error {
return s.svc.Users.UpdateLogin(eUser)
}
func (s *userService) UpdateLoginPassword(user viewmodel.User) error {
eUser := s.mapEntity.User.ToUserEntity(user)
return s.svc.Users.UpdateLoginPassword(eUser)
}
func (s *userService) SaveAddress(address viewmodel.Address) (retVal viewmodel.Address, err error) {
entity := s.mapEntity.Address.ToAddressEntity(address)
entity, err = s.svc.Users.SaveAddress(entity)
@@ -260,10 +265,6 @@ func (s *userService) CheckAndCreateMember(user viewmodel.User, provider viewmod
}
}
if entityUser.UUID == "" {
entityUser = s.mapEntity.User.ToUserEntity(user)
}
var eligibility viewmodel.Eligibility
loc, _ := time.LoadLocation("America/Chicago")
eligibility.TrackingID = s.rangeIn(1000000, 9999999)
@@ -275,7 +276,7 @@ func (s *userService) CheckAndCreateMember(user viewmodel.User, provider viewmod
if err != nil {
return viewmodel.User{}, &viewmodel.ValidationError{Message: fmt.Sprintf("Error finding provider by UUID: %s", err.Error())}
}
} else if entityProvider.InternalID != "" {
} else {
entityProvider, err = s.svc.Provider.GetByNPI(entityProvider.InternalID, entityAuthorUser)
if err != nil {
return viewmodel.User{}, &viewmodel.ValidationError{Message: fmt.Sprintf("Error finding provider by NPI: %s", err.Error())}
@@ -283,8 +284,7 @@ func (s *userService) CheckAndCreateMember(user viewmodel.User, provider viewmod
}
if entityProvider.InternalID == "" {
eligibility.Provider.ProviderNPI = "1699849786"
eligibility.Provider.ProviderName = "LITHOLINK CORPORATION"
return viewmodel.User{}, &viewmodel.ValidationError{Message: "Provider not found"}
} else {
eligibility.Provider.ProviderNPI = entityProvider.InternalID
eligibility.Provider.ProviderName = entityProvider.OrganizatioName

View File

@@ -462,6 +462,22 @@ func (c *userRepo) UpdateLogin(user entity.User) error {
return nil
}
func (c *userRepo) UpdateLoginPassword(user entity.User) error {
const (
query = `UPDATE tab_login a
INNER JOIN tab_user b
ON a.user_id = b.user_id
SET a.password = sha2(?, 512)
WHERE b.user_uuid = ?`
)
if _, err := c.conn.Exec(query, user.Pass, user.UUID); err != nil {
return err
}
return nil
}
func (c *userRepo) RemoveContact(contact entity.ContactInfo) (entity.ContactInfo, error) {
const (
query = `DELETE FROM tab_contact WHERE contact_uuid = ?;`

View File

@@ -35,6 +35,7 @@ type UserRepo interface {
SaveContact(contact entity.ContactInfo) (entity.ContactInfo, error)
RemoveContact(contact entity.ContactInfo) (entity.ContactInfo, error)
UpdateLogin(user entity.User) error
UpdateLoginPassword(user entity.User) error
}
// RideRepo defines the data set for Rides

View File

@@ -80,6 +80,10 @@ func (s *userService) UpdateLogin(user entity.User) error {
return s.svc.db.Users().UpdateLogin(user)
}
func (s *userService) UpdateLoginPassword(user entity.User) error {
return s.svc.db.Users().UpdateLoginPassword(user)
}
// GetUsersByProfile returns a list of users by profile
func (s *userService) GetUsersByProfile(profile string) ([]entity.User, error) {
return s.svc.db.Users().GetUsersByProfile(profile)

View File

@@ -2,6 +2,7 @@ package passwordresetroute
import (
"crypto/sha256"
b64 "encoding/base64"
"fmt"
"math/rand"
"strings"
@@ -115,33 +116,39 @@ func (c *controller) handleResetComplete(ctx echo.Context) error {
}
if len(strings.TrimSpace(user.Pass)) < 1 {
routeutils.ResponseAPIPasswordResetFailed(ctx, "No password")
return routeutils.ResponseAPIPasswordResetFailed(ctx, "No password")
}
pass, err := b64.StdEncoding.DecodeString(user.Pass)
if err != nil {
return routeutils.ResponseAPIPasswordResetFailed(ctx, "Invalid password")
}
user.Pass = string(pass)
passwordResetEntry, err := c.svc.PasswordReset.GetByToken(userToken)
if err != nil || len(passwordResetEntry.Token) < 1 || passwordResetEntry.Expires.Before(time.Now()) || passwordResetEntry.Used == true {
routeutils.ResponseAPIPasswordResetFailed(ctx, "Token error")
return routeutils.ResponseAPIPasswordResetFailed(ctx, "Token error")
}
fullUserData, err := c.svc.Users.GetByUUID(passwordResetEntry.User.ID, "")
if err != nil {
routeutils.ResponseAPIPasswordResetFailed(ctx, "User problem")
return routeutils.ResponseAPIPasswordResetFailed(ctx, "User error")
}
fmt.Println(fullUserData)
//write new password in database
//TODO
fullUserData.Pass = user.Pass //user contains just password sent from reset form
if err = c.svc.Users.UpdateLoginPassword(fullUserData); err != nil {
return routeutils.ResponseAPIPasswordResetFailed(ctx, "Error updating password")
}
if err := c.svc.PasswordReset.SetTokenUsed(userToken); err != nil {
routeutils.ResponseAPIPasswordResetFailed(ctx, "Reset failed")
return routeutils.ResponseAPIPasswordResetFailed(ctx, "Reset failed")
}
//Send email with reset link
notification := viewmodel.Notification{
Type: applicationservice.NotificationTypeEmail,
From: c.cfg.Email.Sender,
To: *user.Email,
To: *fullUserData.Email,
Subject: passwordResetCompleteEmailSubject,
Message: passwordResetCompleteEmailBody,
}

View File

@@ -348,7 +348,11 @@ func (c *controller) handleMember(ctx echo.Context) error {
return routeutils.ResponseAPIAuthError(ctx, "phonenumber or email is required", false)
}
provider := viewmodel.ProviderResp{}
provider, err := c.svc.Provider.GetByNPI("1699849786", authUser)
if err != nil {
return routeutils.ResponseAPIAuthError(ctx, "Provider not found", false)
}
user, err = c.svc.Users.CheckAndCreateMember(user, provider, authUser)
if err != nil {
if validationError, ok := err.(*viewmodel.ValidationError); ok {

View File

@@ -91,10 +91,6 @@ func (c *controller) handleRide(ctx echo.Context) error {
}
ride.Visit.Provider = provider
// user, err := c.svc.Users.GetByUUID(ride.User.ID, "US")
// if err != nil {
// return routeutils.HandleAPIError(ctx, err)
// }
user, err := c.svc.Users.CheckAndCreateMember(ride.Visit.User, provider, authUser)
if err != nil {
if validationError, ok := err.(*viewmodel.ValidationError); ok {
@@ -109,7 +105,6 @@ func (c *controller) handleRide(ctx echo.Context) error {
}
ride.Visit.User = user
ride.User = user
visit.User = user
homeAddress := viewmodel.Address{}
for _, a := range visit.User.Addresses {
@@ -138,9 +133,9 @@ func (c *controller) handleRide(ctx echo.Context) error {
}
ride.Notes = ride.Notes
ride.Passenger.FirstName = ride.Visit.User.First
ride.Passenger.FirstName = visit.User.First
ride.Passenger.LastName = " "
ride.Passenger.PhoneNumber = *ride.Visit.User.PhoneNumber
ride.Passenger.PhoneNumber = *visit.User.PhoneNumber
ride.RideType = "lyft"
ride.VisitDate = &visit.VisitDatetime
ride.VisitTime = &visit.VisitDatetime

Binary file not shown.