Skip to content

Commit e508c53

Browse files
committed
add custom email agent
Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>
1 parent 3329af4 commit e508c53

File tree

22 files changed

+243
-104
lines changed

22 files changed

+243
-104
lines changed

api/grpc/users/v1/users.pb.go

Lines changed: 35 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/grpc/users/v1/users_grpc.pb.go

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/domains/main.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
chclient "github.com/absmach/callhome/pkg/client"
1616
"github.com/absmach/supermq"
1717
grpcDomainsV1 "github.com/absmach/supermq/api/grpc/domains/v1"
18+
grpcUsersV1 "github.com/absmach/supermq/api/grpc/users/v1"
1819
"github.com/absmach/supermq/domains"
1920
domainsSvc "github.com/absmach/supermq/domains"
2021
domainsgrpcapi "github.com/absmach/supermq/domains/api/grpc"
@@ -169,7 +170,7 @@ func main() {
169170
return
170171
}
171172

172-
_, usersHandler, err := grpcclient.SetupUsersClient(ctx, usersClientConfig)
173+
usersClient, usersHandler, err := grpcclient.SetupUsersClient(ctx, usersClientConfig)
173174
if err != nil {
174175
logger.Error(fmt.Sprintf("failed to connect to users gRPC server : %s", err.Error()))
175176
exitCode = 1
@@ -225,7 +226,7 @@ func main() {
225226
return
226227
}
227228

228-
svc, err := newDomainService(ctx, domainsRepo, cache, tracer, cfg, authz, policyService, logger, call)
229+
svc, err := newDomainService(ctx, domainsRepo, cache, tracer, cfg, authz, policyService, logger, call, usersClient)
229230
if err != nil {
230231
logger.Error(fmt.Sprintf("failed to create %s service: %s", svcName, err.Error()))
231232
exitCode = 1
@@ -277,7 +278,7 @@ func main() {
277278
}
278279
}
279280

280-
func newDomainService(ctx context.Context, domainsRepo domainsSvc.Repository, cache domainsSvc.Cache, tracer trace.Tracer, cfg config, authz authz.Authorization, policiessvc policies.Service, logger *slog.Logger, callout callout.Callout) (domains.Service, error) {
281+
func newDomainService(ctx context.Context, domainsRepo domainsSvc.Repository, cache domainsSvc.Cache, tracer trace.Tracer, cfg config, authz authz.Authorization, policiessvc policies.Service, logger *slog.Logger, callout callout.Callout, usersClient grpcUsersV1.UsersServiceClient) (domains.Service, error) {
281282
idProvider := uuid.New()
282283
sidProvider, err := sid.New()
283284
if err != nil {
@@ -289,7 +290,7 @@ func newDomainService(ctx context.Context, domainsRepo domainsSvc.Repository, ca
289290
return nil, err
290291
}
291292

292-
svc, err := domainsSvc.New(domainsRepo, cache, policiessvc, idProvider, sidProvider, availableActions, builtInRoles)
293+
svc, err := domainsSvc.New(domainsRepo, cache, policiessvc, idProvider, sidProvider, availableActions, builtInRoles, usersClient)
293294
if err != nil {
294295
return nil, fmt.Errorf("failed to init domain service: %w", err)
295296
}

cmd/users/main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ type config struct {
9595
SpicedbPreSharedKey string `env:"SMQ_SPICEDB_PRE_SHARED_KEY" envDefault:"12345678"`
9696
PasswordResetURLPrefix string `env:"SMQ_PASSWORD_RESET_URL_PREFIX" envDefault:"http://localhost/password/reset"`
9797
PasswordResetEmailTemplate string `env:"SMQ_PASSWORD_RESET_EMAIL_TEMPLATE" envDefault:"reset-password-email.tmpl"`
98+
EmailTemplate string `env:"SM_EMAIL_TEMPLATE" envDefault:"email.tmpl"`
9899
VerificationURLPrefix string `env:"SMQ_VERIFICATION_URL_PREFIX" envDefault:"http://localhost/verify-email"`
99100
VerificationEmailTemplate string `env:"SMQ_VERIFICATION_EMAIL_TEMPLATE" envDefault:"verification-email.tmpl"`
100101
PassRegex *regexp.Regexp
@@ -146,6 +147,14 @@ func main() {
146147
}
147148
verificationEmailConfig.Template = cfg.VerificationEmailTemplate
148149

150+
customEmailConfig := email.Config{}
151+
if err := env.Parse(&customEmailConfig); err != nil {
152+
logger.Error(fmt.Sprintf("failed to load custom email configuration : %s", err.Error()))
153+
exitCode = 1
154+
return
155+
}
156+
customEmailConfig.Template = cfg.EmailTemplate
157+
149158
dbConfig := pgclient.Config{Name: defDB}
150159
if err := env.ParseWithOptions(&dbConfig, env.Options{Prefix: envPrefixDB}); err != nil {
151160
logger.Error(err.Error())
@@ -233,7 +242,7 @@ func main() {
233242
}
234243
logger.Info("Policy client successfully connected to spicedb gRPC server")
235244

236-
csvc, err := newService(ctx, authz, tokenClient, policyService, domainsClient, db, dbConfig, tracer, cfg, resetPasswordEmailConfig, verificationEmailConfig, logger)
245+
csvc, err := newService(ctx, authz, tokenClient, policyService, domainsClient, db, dbConfig, tracer, cfg, resetPasswordEmailConfig, verificationEmailConfig, customEmailConfig, logger)
237246
if err != nil {
238247
logger.Error(fmt.Sprintf("failed to setup service: %s", err))
239248
exitCode = 1
@@ -294,7 +303,7 @@ func main() {
294303
}
295304
}
296305

297-
func newService(ctx context.Context, authz smqauthz.Authorization, token grpcTokenV1.TokenServiceClient, policyService policies.Service, domainsClient grpcDomainsV1.DomainsServiceClient, db *sqlx.DB, dbConfig pgclient.Config, tracer trace.Tracer, c config, resetPasswordEmailConfig, verificationEmailConfig email.Config, logger *slog.Logger) (users.Service, error) {
306+
func newService(ctx context.Context, authz smqauthz.Authorization, token grpcTokenV1.TokenServiceClient, policyService policies.Service, domainsClient grpcDomainsV1.DomainsServiceClient, db *sqlx.DB, dbConfig pgclient.Config, tracer trace.Tracer, c config, resetPasswordEmailConfig, verificationEmailConfig, customEmailConfig email.Config, logger *slog.Logger) (users.Service, error) {
298307
database := pg.NewDatabase(db, dbConfig, tracer)
299308
idp := uuid.New()
300309
hsr := hasher.New()
@@ -307,6 +316,7 @@ func newService(ctx context.Context, authz smqauthz.Authorization, token grpcTok
307316
c.VerificationURLPrefix,
308317
&resetPasswordEmailConfig,
309318
&verificationEmailConfig,
319+
&customEmailConfig,
310320
)
311321
if err != nil {
312322
logger.Error(fmt.Sprintf("failed to configure e-mailing util: %s", err.Error()))

docker/.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ SMQ_PASSWORD_RESET_URL_PREFIX=http://localhost/password-reset
277277
SMQ_PASSWORD_RESET_EMAIL_TEMPLATE=reset-password-email.tmpl
278278
SMQ_VERIFICATION_URL_PREFIX=http://localhost/verify-email
279279
SMQ_VERIFICATION_EMAIL_TEMPLATE=verification-email.tmpl
280+
SM_EMAIL_TEMPLATE=invitation.tmpl
280281

281282
#### Users Client Config
282283
SMQ_USERS_URL=users:9002

docker/docker-compose.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,7 @@ services:
912912
volumes:
913913
- ./templates/${SMQ_PASSWORD_RESET_EMAIL_TEMPLATE}:/${SMQ_PASSWORD_RESET_EMAIL_TEMPLATE}
914914
- ./templates/${SMQ_VERIFICATION_EMAIL_TEMPLATE}:/${SMQ_VERIFICATION_EMAIL_TEMPLATE}
915+
- ./templates/${SMQ_EMAIL_TEMPLATE}:/${SMQ_EMAIL_TEMPLATE}
915916
# Auth gRPC client certificates
916917
- type: bind
917918
source: ${SMQ_AUTH_GRPC_CLIENT_CERT:-ssl/certs/dummy/client_cert}

0 commit comments

Comments
 (0)