2021-01-18 03:13:54 +00:00
|
|
|
package rules
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"html/template"
|
|
|
|
|
2021-01-18 19:46:19 +00:00
|
|
|
"code.tnxs.net/taxnexus/lib/api/auth0/auth0_models"
|
2021-01-18 03:13:54 +00:00
|
|
|
"code.tnxs.net/taxnexus/lib/api/devops/devops_client/user"
|
|
|
|
"code.tnxs.net/taxnexus/lib/api/devops/devops_models"
|
2021-01-19 01:50:45 +00:00
|
|
|
httptransport "github.com/go-openapi/runtime/client"
|
2021-01-18 03:13:54 +00:00
|
|
|
|
|
|
|
"code.tnxs.net/taxnexus/lib/api/workflow/workflow_client/outgoing_email_message"
|
|
|
|
"code.tnxs.net/taxnexus/lib/api/workflow/workflow_models"
|
|
|
|
"code.tnxs.net/taxnexus/lib/app"
|
|
|
|
"go.temporal.io/sdk/workflow"
|
|
|
|
)
|
|
|
|
|
|
|
|
// StoreUserActivity posts a new user object to datastore and creates the auth0 user
|
|
|
|
func StoreUserActivity(ctx workflow.Context, w app.UserChannelWrapper) error { //nolint:gocritic // what we want
|
|
|
|
postUserParams := user.NewPostUsersParamsWithTimeout(postTimeout)
|
|
|
|
if w.Obj.Name == "" {
|
|
|
|
w.Obj.Name = w.Obj.FirstName + " " + w.Obj.LastName
|
|
|
|
}
|
|
|
|
postUserParams.UserRequest = &devops_models.UserRequest{
|
|
|
|
Data: []*devops_models.User{&w.Obj},
|
|
|
|
}
|
2021-01-19 01:50:45 +00:00
|
|
|
devopsResponse, err := devopsClient.User.PostUsers(postUserParams,
|
|
|
|
httptransport.APIKeyAuth(
|
|
|
|
"X-API-Key",
|
|
|
|
"header",
|
|
|
|
w.APIKey,
|
|
|
|
))
|
2021-01-18 03:13:54 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
var newUser *devops_models.User
|
|
|
|
for _, itm := range devopsResponse.Payload.Data { // single iteration execution
|
|
|
|
newUser = itm
|
|
|
|
}
|
|
|
|
//
|
|
|
|
// create new Auth0 user
|
|
|
|
//
|
|
|
|
auth0UserID, err := app.GetAuth0UserByEmail(newUser.Email)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if auth0UserID != "not found" {
|
|
|
|
return fmt.Errorf("app.StoreUserActivity: 💣 ⛔ Auth0 user exists: %s", auth0UserID)
|
|
|
|
}
|
|
|
|
newAuth0UserID, err := app.CreateNewAuth0User(&app.NewAuth0User{
|
|
|
|
Email: newUser.Email,
|
|
|
|
EmailVerified: true,
|
|
|
|
Name: newUser.Name,
|
|
|
|
UserID: newUser.ID,
|
|
|
|
Username: newUser.Email,
|
|
|
|
FamilyName: newUser.LastName,
|
|
|
|
GivenName: newUser.FirstName,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
newUser.Auth0UserID = newAuth0UserID
|
|
|
|
//
|
|
|
|
// update Taxnexus user
|
|
|
|
//
|
|
|
|
putUserParams := user.NewPutUsersParamsWithTimeout(getTimeout)
|
|
|
|
putUserParams.UserRequest = &devops_models.UserRequest{
|
|
|
|
Data: []*devops_models.User{newUser},
|
|
|
|
}
|
2021-01-19 01:50:45 +00:00
|
|
|
_, err = devopsClient.User.PutUsers(putUserParams,
|
|
|
|
httptransport.APIKeyAuth(
|
|
|
|
"X-API-Key",
|
|
|
|
"header",
|
|
|
|
w.APIKey,
|
|
|
|
))
|
2021-01-18 03:13:54 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
//
|
|
|
|
// send emails
|
|
|
|
//
|
|
|
|
sugar.Info("crm.storeUser: 👍 📤")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// NotifyUserActivity sends an email to a new lead
|
|
|
|
func NotifyUserActivity(ctx context.Context, w *app.UserChannelWrapper) error {
|
|
|
|
sugar.Info("workflow.notifyUser: 📥")
|
|
|
|
var buf bytes.Buffer
|
|
|
|
const textBody = `
|
|
|
|
|
|
|
|
Alert! New User Inquiry from Taxnexus.io website.
|
|
|
|
|
|
|
|
Taxnexus ID: {{.ID}}
|
|
|
|
First Name: {{.FirstName}}
|
|
|
|
Last Name: {{.LastName}}
|
|
|
|
Email: {{.Email}}
|
|
|
|
Message: {{.Description}}
|
|
|
|
|
|
|
|
-- end --
|
|
|
|
`
|
|
|
|
t := template.Must(template.New("textBody").Parse(textBody))
|
|
|
|
err := t.Execute(&buf, w)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
emailParams := outgoing_email_message.NewPostOutgoingEmailMessagesParamsWithTimeout(postTimeout)
|
|
|
|
emailParams.OutgoingEmailMessageRequest = &workflow_models.OutgoingEmailMessageRequest{
|
|
|
|
Data: []*workflow_models.OutgoingEmailMessage{
|
|
|
|
{
|
|
|
|
Subject: "New lead from " + w.Obj.Name,
|
|
|
|
ValidatedFromAddress: "support@taxnexus.net",
|
|
|
|
ToAddress: "info@taxnexus.net",
|
|
|
|
FromName: "Taxnexus Onboarding",
|
|
|
|
Text: buf.String(),
|
|
|
|
HTML: "<pre>" + buf.String() + "</pre>",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
2021-01-19 01:53:10 +00:00
|
|
|
_, err = workflowClient.OutgoingEmailMessage.PostOutgoingEmailMessages(
|
|
|
|
emailParams,
|
2021-01-19 01:50:45 +00:00
|
|
|
httptransport.APIKeyAuth(
|
|
|
|
"X-API-Key",
|
|
|
|
"header",
|
|
|
|
w.APIKey,
|
|
|
|
))
|
2021-01-18 03:13:54 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
sugar.Info("workflow.notifyUser: 👍 📤")
|
|
|
|
return nil
|
|
|
|
}
|
2021-01-18 19:46:19 +00:00
|
|
|
|
|
|
|
// EnrichUsers synchronizes contact sources
|
|
|
|
func EnrichUsers(m *devops_models.User, r *auth0_models.User) (*devops_models.User, *auth0_models.User) { //nolint:gocritic,lll // shut up!
|
|
|
|
// parse first/last name
|
|
|
|
nm := *m
|
|
|
|
nr := *r
|
|
|
|
nm.LastIP = r.LastIP
|
|
|
|
nm.LastLogin = r.LastLogin
|
|
|
|
nm.LoginCount = r.LoginsCount
|
|
|
|
nm.Auth0UserID = r.UserID
|
|
|
|
|
|
|
|
// enrich taxnexus user (m->nm)
|
|
|
|
if m.CommunityNickname == "" && r.Nickname != "" {
|
|
|
|
nm.CommunityNickname = r.Nickname
|
|
|
|
}
|
|
|
|
if m.Email == "" && r.Email != "" {
|
|
|
|
nm.Email = r.Email
|
|
|
|
}
|
|
|
|
if m.SmallPhotoURL == "" && r.Picture != "" {
|
|
|
|
nm.SmallPhotoURL = r.Picture
|
|
|
|
}
|
|
|
|
// enrich auth0 user (r->nr)
|
|
|
|
if r.Nickname == "" && m.CommunityNickname != "" {
|
|
|
|
nr.Nickname = m.CommunityNickname
|
|
|
|
}
|
|
|
|
if r.Picture == "" && m.SmallPhotoURL != "" {
|
|
|
|
nr.Picture = m.SmallPhotoURL
|
|
|
|
}
|
|
|
|
|
|
|
|
return &nm, &nr
|
|
|
|
}
|