From 65ab9fea056b4d565886b00833575427d7da64a2 Mon Sep 17 00:00:00 2001 From: ice-cronus <105345303+ice-cronus@users.noreply.github.com> Date: Fri, 28 Jun 2024 15:36:52 +0300 Subject: [PATCH 1/5] email queue processing --- application.yaml | 4 + auth/email_link/.testdata/docker-compose.yaml | 10 + auth/email_link/DDL.sql | 6 +- auth/email_link/contract.go | 33 ++- auth/email_link/email_modify.go | 2 +- auth/email_link/emaillink.go | 70 +++++- auth/email_link/link_start_auth.go | 164 ++++++------- auth/email_link/queue.go | 231 ++++++++++++++++++ .../translations/email/modify_email/af.html | 4 +- .../translations/email/modify_email/am.html | 4 +- .../translations/email/modify_email/ar.html | 4 +- .../translations/email/modify_email/az.html | 4 +- .../translations/email/modify_email/bg.html | 4 +- .../translations/email/modify_email/bn.html | 4 +- .../translations/email/modify_email/cs.html | 4 +- .../translations/email/modify_email/de.html | 4 +- .../translations/email/modify_email/el.html | 4 +- .../translations/email/modify_email/en.html | 4 +- .../translations/email/modify_email/es.html | 4 +- .../translations/email/modify_email/fa.html | 4 +- .../translations/email/modify_email/fr.html | 4 +- .../translations/email/modify_email/gu.html | 4 +- .../translations/email/modify_email/he.html | 4 +- .../translations/email/modify_email/hi.html | 4 +- .../translations/email/modify_email/hu.html | 4 +- .../translations/email/modify_email/id.html | 4 +- .../translations/email/modify_email/it.html | 4 +- .../translations/email/modify_email/ja.html | 4 +- .../translations/email/modify_email/jv.html | 4 +- .../translations/email/modify_email/kn.html | 4 +- .../translations/email/modify_email/ko.html | 4 +- .../translations/email/modify_email/mr.html | 4 +- .../translations/email/modify_email/ms.html | 4 +- .../translations/email/modify_email/nb.html | 4 +- .../translations/email/modify_email/nn.html | 4 +- .../email/modify_email/pa-in.html | 4 +- .../translations/email/modify_email/pl.html | 4 +- .../translations/email/modify_email/ps.html | 4 +- .../translations/email/modify_email/pt.html | 4 +- .../translations/email/modify_email/ro.html | 4 +- .../translations/email/modify_email/ru.html | 4 +- .../translations/email/modify_email/sd.html | 4 +- .../translations/email/modify_email/sk.html | 4 +- .../translations/email/modify_email/sl.html | 4 +- .../translations/email/modify_email/sq.html | 4 +- .../translations/email/modify_email/su.html | 4 +- .../translations/email/modify_email/sv.html | 4 +- .../translations/email/modify_email/ta.html | 4 +- .../translations/email/modify_email/te.html | 4 +- .../translations/email/modify_email/th.html | 4 +- .../email/modify_email/tl-ph.html | 4 +- .../translations/email/modify_email/tr.html | 4 +- .../translations/email/modify_email/uk.html | 4 +- .../translations/email/modify_email/ur.html | 4 +- .../translations/email/modify_email/vi.html | 4 +- .../translations/email/modify_email/yo.html | 4 +- .../email/modify_email/zh-cn.html | 4 +- .../translations/email/modify_email/zh.html | 4 +- .../translations/email/modify_email/zu.html | 4 +- .../translations/email/signin/af.html | 4 +- .../translations/email/signin/am.html | 4 +- .../translations/email/signin/ar.html | 4 +- .../translations/email/signin/az.html | 4 +- .../translations/email/signin/bg.html | 4 +- .../translations/email/signin/bn.html | 4 +- .../translations/email/signin/cs.html | 4 +- .../translations/email/signin/de.html | 4 +- .../translations/email/signin/el.html | 4 +- .../translations/email/signin/en.html | 4 +- .../translations/email/signin/es.html | 4 +- .../translations/email/signin/fa.html | 4 +- .../translations/email/signin/fr.html | 4 +- .../translations/email/signin/gu.html | 4 +- .../translations/email/signin/he.html | 4 +- .../translations/email/signin/hi.html | 4 +- .../translations/email/signin/hu.html | 4 +- .../translations/email/signin/id.html | 4 +- .../translations/email/signin/it.html | 4 +- .../translations/email/signin/ja.html | 4 +- .../translations/email/signin/jv.html | 4 +- .../translations/email/signin/kn.html | 4 +- .../translations/email/signin/ko.html | 4 +- .../translations/email/signin/mr.html | 4 +- .../translations/email/signin/ms.html | 4 +- .../translations/email/signin/nb.html | 4 +- .../translations/email/signin/nn.html | 4 +- .../translations/email/signin/pa-in.html | 4 +- .../translations/email/signin/pl.html | 4 +- .../translations/email/signin/ps.html | 4 +- .../translations/email/signin/pt.html | 4 +- .../translations/email/signin/ro.html | 4 +- .../translations/email/signin/ru.html | 4 +- .../translations/email/signin/sd.html | 4 +- .../translations/email/signin/sk.html | 4 +- .../translations/email/signin/sl.html | 4 +- .../translations/email/signin/sq.html | 4 +- .../translations/email/signin/su.html | 4 +- .../translations/email/signin/sv.html | 4 +- .../translations/email/signin/ta.html | 4 +- .../translations/email/signin/te.html | 4 +- .../translations/email/signin/th.html | 4 +- .../translations/email/signin/tl-ph.html | 4 +- .../translations/email/signin/tr.html | 4 +- .../translations/email/signin/uk.html | 4 +- .../translations/email/signin/ur.html | 4 +- .../translations/email/signin/vi.html | 4 +- .../translations/email/signin/yo.html | 4 +- .../translations/email/signin/zh-cn.html | 4 +- .../translations/email/signin/zh.html | 4 +- .../translations/email/signin/zu.html | 4 +- auth/email_link/users.go | 2 +- cmd/eskimo-hut/auth.go | 5 +- cmd/eskimo-hut/contract.go | 4 +- cmd/eskimo-hut/eskimo_hut.go | 7 +- cmd/eskimo-hut/users.go | 2 +- cmd/eskimo/eskimo.go | 2 +- ...rebase_phone_login_with_ice_email_login.go | 2 +- go.mod | 2 + go.sum | 44 ++-- 119 files changed, 652 insertions(+), 346 deletions(-) create mode 100644 auth/email_link/.testdata/docker-compose.yaml create mode 100644 auth/email_link/queue.go diff --git a/application.yaml b/application.yaml index eee98567..69810cd0 100644 --- a/application.yaml +++ b/application.yaml @@ -85,6 +85,10 @@ kyc/quiz: auth/email-link: extraLoadBalancersCount: 2 wintr/connectors/storage/v2: *db + wintr/connectors/storage/v3: + url: redis://default:@localhost:6379/ + emailSendBatchSize: 2 + initEmailRateLimit: "2:1m" fromEmailAddress: no-reply@ice.io fromEmailName: ice emailValidation: diff --git a/auth/email_link/.testdata/docker-compose.yaml b/auth/email_link/.testdata/docker-compose.yaml new file mode 100644 index 00000000..c2cc1481 --- /dev/null +++ b/auth/email_link/.testdata/docker-compose.yaml @@ -0,0 +1,10 @@ +version: '3.7' +services: + eskimo-dfly: + container_name: eskimo-dfly + image: 'docker.dragonflydb.io/dragonflydb/dragonfly' + ulimits: + memlock: -1 + ports: + - 6379:6379 + command: "dragonfly --dbnum=1" \ No newline at end of file diff --git a/auth/email_link/DDL.sql b/auth/email_link/DDL.sql index 099b70d1..f2638e4d 100644 --- a/auth/email_link/DDL.sql +++ b/auth/email_link/DDL.sql @@ -9,6 +9,7 @@ CREATE TABLE IF NOT EXISTS email_link_sign_ins ( previously_issued_token_seq BIGINT DEFAULT 0 NOT NULL, confirmation_code_wrong_attempts_count BIGINT DEFAULT 0 NOT NULL, email TEXT NOT NULL, + language TEXT NOT NULL, confirmation_code TEXT, user_id TEXT, phone_number_to_email_migration_user_id TEXT, @@ -33,4 +34,7 @@ CREATE TABLE IF NOT EXISTS sign_ins_per_ip ( login_attempts BIGINT DEFAULT 0 NOT NULL CONSTRAINT sign_ins_per_ip_login_attempts_count CHECK (login_attempts <= 10), ip TEXT NOT NULL, PRIMARY KEY (login_session_number, ip) -); \ No newline at end of file +); + +ALTER TABLE email_link_sign_ins + ADD COLUMN IF NOT EXISTS language TEXT NOT NULL DEFAULT 'en'; \ No newline at end of file diff --git a/auth/email_link/contract.go b/auth/email_link/contract.go index 141f3bd6..86cce467 100644 --- a/auth/email_link/contract.go +++ b/auth/email_link/contract.go @@ -5,7 +5,6 @@ package emaillinkiceauth import ( "context" "embed" - "io" "mime/multipart" "text/template" stdlibtime "time" @@ -16,6 +15,7 @@ import ( "github.com/ice-blockchain/eskimo/users" "github.com/ice-blockchain/wintr/auth" "github.com/ice-blockchain/wintr/connectors/storage/v2" + storagev3 "github.com/ice-blockchain/wintr/connectors/storage/v3" "github.com/ice-blockchain/wintr/email" "github.com/ice-blockchain/wintr/time" ) @@ -28,13 +28,15 @@ type ( } Client interface { IceUserIDClient - SendSignInLinkToEmail(ctx context.Context, emailValue, deviceUniqueID, language, clientIP string) (loginSession string, err error) + Close(ctx context.Context) error + SendSignInLinkToEmail(ctx context.Context, emailValue, deviceUniqueID, language, clientIP string) (queuePos int64, rateLimit, loginSession string, err error) SignIn(ctx context.Context, loginFlowToken, confirmationCode string) (tokens *Tokens, emailConfirmed bool, err error) RegenerateTokens(ctx context.Context, prevToken string) (tokens *Tokens, err error) UpdateMetadata(ctx context.Context, userID string, metadata *users.JSON) (*users.JSON, error) + CheckHealth(ctx context.Context) error } IceUserIDClient interface { - io.Closer + Close(ctx context.Context) error IceUserID(ctx context.Context, mail string) (iceID string, err error) Metadata(ctx context.Context, userID, emailAddress string) (metadata string, metadataFields *users.JSON, err error) } @@ -86,14 +88,18 @@ const ( sameIPCheckRate = 24 * stdlibtime.Hour duplicatedSignInRequestsInLessThan = 2 * stdlibtime.Second + loginQueueKey = "login_queue" + loginRateLimitKey = "login_rate_limit" ) type ( languageCode = string client struct { db *storage.DB + emailQueueLock storage.Lock + queueDB storagev3.DB cfg *config - shutdown func() error + shutdown func(ctx context.Context) error authClient auth.Client userModifier UserModifier emailClients []email.Client @@ -101,12 +107,13 @@ type ( emailClientLBIndex uint64 } config struct { - FromEmailName string `yaml:"fromEmailName"` - FromEmailAddress string `yaml:"fromEmailAddress"` - PetName string `yaml:"petName"` - AppName string `yaml:"appName"` - TeamName string `yaml:"teamName"` - LoginSession struct { + FromEmailName string `yaml:"fromEmailName"` + FromEmailAddress string `yaml:"fromEmailAddress"` + PetName string `yaml:"petName"` + AppName string `yaml:"appName"` + TeamName string `yaml:"teamName"` + InitEmailRateLimit string `yaml:"initEmailRateLimit"` + LoginSession struct { JwtSecret string `yaml:"jwtSecret"` } `yaml:"loginSession"` EmailValidation struct { @@ -117,8 +124,9 @@ type ( ConfirmationCode struct { MaxWrongAttemptsCount int64 `yaml:"maxWrongAttemptsCount"` } `yaml:"confirmationCode"` - DisableEmailSending bool `yaml:"disableEmailSending"` - ExtraLoadBalancersCount int `yaml:"extraLoadBalancersCount"` + DisableEmailSending bool `yaml:"disableEmailSending"` + ExtraLoadBalancersCount int `yaml:"extraLoadBalancersCount"` + EmailSendBatchSize int64 `yaml:"emailSendBatchSize"` } loginID struct { Email string `json:"email,omitempty" example:"someone1@example.com"` @@ -180,4 +188,5 @@ var ( modifyEmailType, notifyEmailChangedType, } + errAlreadyEnqueued = errors.New("already enqueued") ) diff --git a/auth/email_link/email_modify.go b/auth/email_link/email_modify.go index 412ed315..44d64aa9 100644 --- a/auth/email_link/email_modify.go +++ b/auth/email_link/email_modify.go @@ -44,7 +44,7 @@ func (c *client) handleEmailModification(ctx context.Context, els *emailLinkSign if notifyEmail != "" { now := time.Now() resetConfirmationCode := generateConfirmationCode() - uErr := c.upsertEmailLinkSignIn(ctx, oldEmail, els.DeviceUniqueID, resetConfirmationCode, now) + uErr := c.upsertEmailLinkSignIn(ctx, oldEmail, els.DeviceUniqueID, resetConfirmationCode, els.Language, now) if uErr != nil { return multierror.Append( //nolint:wrapcheck // . errors.Wrapf(c.resetEmailModification(ctx, usr.ID, oldEmail), "[reset] resetEmailModification failed for email:%v", oldEmail), diff --git a/auth/email_link/emaillink.go b/auth/email_link/emaillink.go index 706852fe..e59a26de 100644 --- a/auth/email_link/emaillink.go +++ b/auth/email_link/emaillink.go @@ -14,11 +14,13 @@ import ( stdlibtime "time" "github.com/golang-jwt/jwt/v5" + "github.com/hashicorp/go-multierror" "github.com/pkg/errors" "github.com/ice-blockchain/wintr/auth" appcfg "github.com/ice-blockchain/wintr/config" "github.com/ice-blockchain/wintr/connectors/storage/v2" + storagev3 "github.com/ice-blockchain/wintr/connectors/storage/v3" "github.com/ice-blockchain/wintr/email" "github.com/ice-blockchain/wintr/log" "github.com/ice-blockchain/wintr/time" @@ -29,15 +31,25 @@ func init() { loadEmailMagicLinkTranslationTemplates() } +//nolint:funlen // . func NewClient(ctx context.Context, userModifier UserModifier, authClient auth.Client) Client { cfg := loadConfiguration() cfg.validate() db := storage.MustConnect(ctx, ddl, applicationYamlKey) - + queueDB := storagev3.MustConnect(ctx, applicationYamlKey) + if initRateLimitErr := queueDB.SetNX(ctx, loginRateLimitKey, cfg.InitEmailRateLimit, 0).Err(); initRateLimitErr != nil { + log.Panic(errors.Wrapf(initRateLimitErr, "failed to init email sending rate limit")) + } + lock, err := storage.NewLock(ctx, db, loginQueueKey) + log.Panic(errors.Wrapf(err, "failed to initialize email queue lock")) //nolint:revive // . cl := &client{ - cfg: cfg, - shutdown: db.Close, + cfg: cfg, + shutdown: closeAll( + func(closeCtx context.Context) func() error { return func() error { return lock.Unlock(closeCtx) } }, + closerFunc(db.Close), closerFunc(queueDB.Close)), db: db, + emailQueueLock: lock, + queueDB: queueDB, authClient: authClient, userModifier: userModifier, emailClients: make([]email.Client, 0, cfg.ExtraLoadBalancersCount+1), @@ -52,6 +64,7 @@ func NewClient(ctx context.Context, userModifier UserModifier, authClient auth.C cl.emailClients = append(cl.emailClients, email.New(fmt.Sprintf("%v/%v", applicationYamlKey, i+1))) cl.fromRecipients = append(cl.fromRecipients, fromRecipient{nestedCfg.FromEmailName, nestedCfg.FromEmailAddress}) } + go cl.processEmailQueue(ctx) } go cl.startOldLoginAttemptsCleaner(ctx) @@ -62,13 +75,51 @@ func NewROClient(ctx context.Context) IceUserIDClient { db := storage.MustConnect(ctx, ddl, applicationYamlKey) return &client{ - shutdown: db.Close, + shutdown: closeAll(closerFunc(db.Close)), db: db, } } -func (c *client) Close() error { - return errors.Wrap(c.shutdown(), "closing auth/emaillink repository failed") +func closerFunc(closeFunc func() error) func(closeCtx context.Context) func() error { + return func(_ context.Context) func() error { + return closeFunc + } +} + +func closeAll(getclosers ...func(ctx context.Context) func() error) func(context.Context) error { + return func(ctx context.Context) error { + errs := make([]error, 0, len(getclosers)) + for _, closer := range getclosers { + if err := closer(ctx)(); err != nil { + errs = append(errs, err) + } + } + + return multierror.Append(nil, errs...).ErrorOrNil() + } +} + +func (c *client) Close(ctx context.Context) error { + return errors.Wrap(c.shutdown(ctx), "closing auth/emaillink repository failed") +} + +func (c *client) CheckHealth(ctx context.Context) error { + return errors.Wrapf(c.checkQueueDBHealth(ctx), "[health-check] failed to ping queueDB/dfly for email client") +} + +func (c *client) checkQueueDBHealth(ctx context.Context) error { + if resp := c.queueDB.Ping(ctx); resp.Err() != nil || resp.Val() != "PONG" { + if resp.Err() == nil { + resp.SetErr(errors.Errorf("response `%v` is not `PONG`", resp.Val())) + } + + return errors.Wrap(resp.Err(), "[health-check] failed to ping DB") + } + if !c.queueDB.IsRW(ctx) { + return errors.New("db is not writeable") + } + + return nil } func loadConfiguration() *config { @@ -97,6 +148,7 @@ func loadLoginSessionConfiguration(cfg *config) { } } +//nolint:funlen // . func (cfg *config) validate() { if cfg.LoginSession.JwtSecret == "" { log.Panic(errors.New("no login session jwt secret provided")) @@ -125,6 +177,12 @@ func (cfg *config) validate() { if cfg.TeamName == "" { log.Panic("no team name specified") } + if cfg.EmailSendBatchSize == 0 { + log.Panic("emailSendBatchSize not specified") + } + if cfg.InitEmailRateLimit == "" { + log.Panic("initEmailRateLimit not specified") + } } func (t *emailTemplate) getSubject(data any) string { diff --git a/auth/email_link/link_start_auth.go b/auth/email_link/link_start_auth.go index 99c0c057..6756e07d 100644 --- a/auth/email_link/link_start_auth.go +++ b/auth/email_link/link_start_auth.go @@ -22,75 +22,88 @@ import ( "github.com/ice-blockchain/wintr/time" ) -//nolint:funlen,gocognit,revive //. -func (c *client) SendSignInLinkToEmail(ctx context.Context, emailValue, deviceUniqueID, language, clientIP string) (loginSession string, err error) { +//nolint:funlen,gocognit,revive,gocritic,lll //. +func (c *client) SendSignInLinkToEmail(ctx context.Context, emailValue, deviceUniqueID, language, clientIP string) (posInQueue int64, rateLimit, loginSession string, err error) { if ctx.Err() != nil { - return "", errors.Wrap(ctx.Err(), "send sign in link to email failed because context failed") + return 0, "", "", errors.Wrap(ctx.Err(), "send sign in link to email failed because context failed") } - id := loginID{emailValue, deviceUniqueID} now := time.Now() + id := loginID{emailValue, deviceUniqueID} loginSessionNumber := now.Time.Unix() / int64(sameIPCheckRate.Seconds()) + oldEmail := users.ConfirmedEmail(ctx) + if oldEmail == "" { + posInQueue, rateLimit, err = c.enqueueLoginAttempt(ctx, now, emailValue) + if err != nil { + if errors.Is(err, errAlreadyEnqueued) { + loginSession, err = c.getExistingLoginSession(ctx, &id, loginSessionNumber, clientIP) + + return posInQueue, rateLimit, loginSession, errors.Wrapf(err, "failed to fetch existing login session for email %v", id.Email) + } + + return 0, "", "", errors.Wrapf(err, "failed to enqueue email %v", emailValue) + } + } + if vErr := c.validateEmailSignIn(ctx, &id); vErr != nil { - return "", errors.Wrapf(vErr, "can't validate email sign in for:%#v", id) + return 0, "", "", errors.Wrapf(vErr, "can't validate email sign in for:%#v", id) } - oldEmail := users.ConfirmedEmail(ctx) if oldEmail != "" { loginSessionNumber = 0 clientIP = "" //nolint:revive // . oldID := loginID{oldEmail, deviceUniqueID} if vErr := c.validateEmailModification(ctx, emailValue, &oldID); vErr != nil { - return "", errors.Wrapf(vErr, "can't validate modification email for:%#v", oldID) + return 0, "", "", errors.Wrapf(vErr, "can't validate modification email for:%#v", oldID) } } confirmationCode := generateConfirmationCode() loginSession, err = c.generateLoginSession(&id, clientIP, oldEmail, loginSessionNumber) if err != nil { - return "", errors.Wrap(err, "can't call generateLoginSession") + return 0, "", "", errors.Wrap(err, "can't call generateLoginSession") } - if loginSessionNumber > 0 && clientIP != "" && userIDForPhoneNumberToEmailMigration(ctx) == "" { - if ipErr := c.upsertIPLoginAttempt(ctx, &id, clientIP, loginSessionNumber); ipErr != nil { - return "", errors.Wrapf(ipErr, "failed increment login attempts for IP:%v (session num %v)", clientIP, loginSessionNumber) - } - } - if uErr := c.upsertEmailLinkSignIn(ctx, id.Email, id.DeviceUniqueID, confirmationCode, now); uErr != nil { + if uErr := c.upsertEmailLinkSignIn(ctx, id.Email, id.DeviceUniqueID, confirmationCode, language, now); uErr != nil { if errors.Is(uErr, ErrUserDuplicate) { - oldLoginSession, oErr := c.restoreOldLoginSession(ctx, &id, clientIP, oldEmail, loginSessionNumber) + oldLoginSession, oErr := c.restoreOldLoginSession(&id, clientIP, oldEmail, loginSessionNumber) if oErr != nil { - return "", multierror.Append( //nolint:wrapcheck // . + return 0, "", "", multierror.Append( //nolint:wrapcheck // . errors.Wrapf(oErr, "failed to calculate oldLoginSession"), errors.Wrapf(uErr, "failed to store/update email link sign ins for id:%#v", id), ).ErrorOrNil() } - return oldLoginSession, nil + return posInQueue, rateLimit, oldLoginSession, nil } - return "", multierror.Append( //nolint:wrapcheck // . - errors.Wrapf(c.decrementIPLoginAttempts(ctx, clientIP, loginSessionNumber), "[rollback] failed to rollback login attempts for ip"), - errors.Wrapf(uErr, "failed to store/update email link sign ins for id:%#v", id), - ).ErrorOrNil() + return 0, "", "", errors.Wrapf(uErr, "failed to store/update email link sign ins for id:%#v", id) + } + if oldEmail != "" { + if sendModEmailErr := c.sendEmailWithType(ctx, modifyEmailType, language, []string{id.Email}, []string{confirmationCode}); sendModEmailErr != nil { + return 0, "", loginSession, errors.Wrapf(sendModEmailErr, "failed to send validation email for id:%#v", id) + } } - if sErr := c.sendConfirmationCode(ctx, &id, oldEmail, confirmationCode, language); sErr != nil { - return "", multierror.Append( //nolint:wrapcheck // . - errors.Wrapf(c.decrementIPLoginAttempts(ctx, clientIP, loginSessionNumber), "[rollback] failed to rollback login attempts for ip"), - errors.Wrapf(sErr, "can't send magic link for id:%#v", id), - ).ErrorOrNil() + + return posInQueue, rateLimit, loginSession, nil +} + +func (c *client) getExistingLoginSession(ctx context.Context, id *loginID, loginSessionNumber int64, clientIP string) (loginSession string, err error) { + _, sErr := c.getEmailLinkSignInByPk(ctx, id, "") + if sErr != nil { + return "", errors.Wrapf(sErr, "failed to get user info by email:%v", id.Email) + } + loginSession, err = c.generateLoginSession(id, clientIP, "", loginSessionNumber) + if err != nil { + return "", errors.Wrap(err, "can't call generateLoginSession") } return loginSession, nil } -func (c *client) restoreOldLoginSession(ctx context.Context, id *loginID, clientIP, oldEmail string, loginSessionNumber int64) (string, error) { +func (c *client) restoreOldLoginSession(id *loginID, clientIP, oldEmail string, loginSessionNumber int64) (string, error) { oldLoginSession, dErr := c.generateLoginSession(id, clientIP, oldEmail, loginSessionNumber) if dErr != nil { - return "", multierror.Append( //nolint:wrapcheck // . - errors.Wrapf(c.decrementIPLoginAttempts(ctx, clientIP, loginSessionNumber), "[rollback] failed to rollback login attempts for ip"), - errors.Wrap(dErr, "can't generate loginSession"), - ).ErrorOrNil() + return "", errors.Wrap(dErr, "can't generate loginSession") } - return oldLoginSession, errors.Wrapf(c.decrementIPLoginAttempts(ctx, clientIP, loginSessionNumber), - "failed to rollback login attempts for ip due to reuse of loginSession") + return oldLoginSession, nil } func (c *client) validateEmailSignIn(ctx context.Context, id *loginID) error { @@ -112,19 +125,6 @@ func (c *client) validateEmailSignIn(ctx context.Context, id *loginID) error { return nil } -func (c *client) decrementIPLoginAttempts(ctx context.Context, ip string, loginSessionNumber int64) error { - if ip != "" && loginSessionNumber > 0 && userIDForPhoneNumberToEmailMigration(ctx) == "" { - sql := `UPDATE sign_ins_per_ip SET - login_attempts = GREATEST(sign_ins_per_ip.login_attempts - 1, 0) - WHERE ip = $1 AND login_session_number = $2` - _, err := storage.Exec(ctx, c.db, sql, ip, loginSessionNumber) - - return errors.Wrapf(err, "failed to decrease login attempts for ip %v lsn %v", ip, loginSessionNumber) - } - - return nil -} - func (c *client) validateEmailModification(ctx context.Context, newEmail string, oldID *loginID) error { if iErr := c.isUserExist(ctx, newEmail); !storage.IsErr(iErr, storage.ErrNotFound) { if iErr != nil { @@ -149,42 +149,36 @@ func (c *client) validateEmailModification(ctx context.Context, newEmail string, return nil } -func (c *client) sendConfirmationCode(ctx context.Context, id *loginID, oldEmail, confirmationCode, language string) error { - var emailType string - if oldEmail != "" { - emailType = modifyEmailType - } else { - emailType = signInEmailType - } - - return errors.Wrapf(c.sendEmailWithType(ctx, emailType, id.Email, language, confirmationCode), "failed to send validation email for id:%#v", id) -} - //nolint:funlen // . -func (c *client) sendEmailWithType(ctx context.Context, emailType, toEmail, language, confirmationCode string) error { +func (c *client) sendEmailWithType(ctx context.Context, emailType, language string, toEmails, confirmationCodes []string) error { var tmpl *emailTemplate tmpl, ok := allEmailLinkTemplates[emailType][language] if !ok { tmpl = allEmailLinkTemplates[emailType][defaultLanguage] } dataBody := struct { - Email string - ConfirmationCode string - PetName string - AppName string - TeamName string + PetName string + AppName string + TeamName string }{ - Email: toEmail, - ConfirmationCode: confirmationCode, - PetName: c.cfg.PetName, - AppName: c.cfg.AppName, - TeamName: c.cfg.TeamName, + PetName: c.cfg.PetName, + AppName: c.cfg.AppName, + TeamName: c.cfg.TeamName, } dataSubject := struct { AppName string }{ AppName: c.cfg.AppName, } + participants := make([]email.Participant, 0, len(toEmails)) + for i := range toEmails { + participants = append(participants, email.Participant{ + Name: "", + Email: toEmails[i], + SubstitutionFields: map[string]string{"-conf_code-": confirmationCodes[i], "-email-": toEmails[i]}, + }) + } + lbIdx := atomic.AddUint64(&c.emailClientLBIndex, 1) % uint64(c.cfg.ExtraLoadBalancersCount+1) return errors.Wrapf(c.emailClients[lbIdx].Send(ctx, &email.Parcel{ @@ -197,27 +191,26 @@ func (c *client) sendEmailWithType(ctx context.Context, emailType, toEmail, lang Name: c.fromRecipients[lbIdx].FromEmailName, Email: c.fromRecipients[lbIdx].FromEmailAddress, }, - }, email.Participant{ - Name: "", - Email: toEmail, - }), "failed to send email with type:%v for user with email:%v", emailType, toEmail) + }, participants...), "failed to send email with type:%v for user with emails:%v", emailType, toEmails) } -//nolint:lll // . -func (c *client) upsertEmailLinkSignIn(ctx context.Context, toEmail, deviceUniqueID, code string, now *time.Time) error { +//nolint:lll,revive // . +func (c *client) upsertEmailLinkSignIn(ctx context.Context, toEmail, deviceUniqueID, code, language string, now *time.Time) error { confirmationCodeWrongAttempts := 0 - params := []any{now.Time, toEmail, deviceUniqueID, code, confirmationCodeWrongAttempts, userIDForPhoneNumberToEmailMigration(ctx)} + params := []any{now.Time, toEmail, deviceUniqueID, code, language, confirmationCodeWrongAttempts, userIDForPhoneNumberToEmailMigration(ctx)} sql := fmt.Sprintf(`INSERT INTO email_link_sign_ins ( created_at, email, device_unique_id, confirmation_code, + language, confirmation_code_wrong_attempts_count, phone_number_to_email_migration_user_id) - VALUES ($1, $2, $3, $4, $5, NULLIF($6,'')) + VALUES ($1, $2, $3, $4,$5, $6, NULLIF($7,'')) ON CONFLICT (email, device_unique_id) DO UPDATE SET created_at = EXCLUDED.created_at, confirmation_code = EXCLUDED.confirmation_code, + language = EXCLUDED.language, confirmation_code_wrong_attempts_count = EXCLUDED.confirmation_code_wrong_attempts_count, phone_number_to_email_migration_user_id = COALESCE(NULLIF(EXCLUDED.phone_number_to_email_migration_user_id,''),email_link_sign_ins.phone_number_to_email_migration_user_id), email_confirmed_at = null, @@ -234,25 +227,6 @@ func (c *client) upsertEmailLinkSignIn(ctx context.Context, toEmail, deviceUniqu return errors.Wrapf(err, "failed to insert/update email link sign ins record for email:%v", toEmail) } -func (c *client) upsertIPLoginAttempt(ctx context.Context, id *loginID, clientIP string, loginSessionNumber int64) error { - sql := `INSERT INTO sign_ins_per_ip (ip, login_session_number, login_attempts) - VALUES ($1, $2, 1) - ON CONFLICT (login_session_number, ip) DO UPDATE - SET login_attempts = sign_ins_per_ip.login_attempts + 1` - _, err := storage.Exec(ctx, c.db, sql, clientIP, loginSessionNumber) - if err != nil { - if storage.IsErr(err, storage.ErrCheckFailed) { - err = errors.Wrapf(ErrTooManyAttempts, "user %#v is blocked due to a lot of requests from IP %v", id, clientIP) - - return terror.New(err, map[string]any{"ip": clientIP}) - } - - return errors.Wrapf(err, "failed to increment login attempts from IP %v", clientIP) - } - - return nil -} - func (c *client) generateMagicLinkPayload(id *loginID, oldEmail string, now *time.Time) (string, error) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, loginFlowToken{ RegisteredClaims: &jwt.RegisteredClaims{ diff --git a/auth/email_link/queue.go b/auth/email_link/queue.go new file mode 100644 index 00000000..4bd62f38 --- /dev/null +++ b/auth/email_link/queue.go @@ -0,0 +1,231 @@ +// SPDX-License-Identifier: ice License 1.0 + +package emaillinkiceauth + +import ( + "context" + "fmt" + "math/rand/v2" + "strconv" + "strings" + stdlibtime "time" + + "github.com/hashicorp/go-multierror" + "github.com/pkg/errors" + "github.com/redis/go-redis/v9" + + "github.com/ice-blockchain/wintr/connectors/storage/v2" + "github.com/ice-blockchain/wintr/log" + "github.com/ice-blockchain/wintr/time" +) + +//nolint:funlen // . +func (c *client) enqueueLoginAttempt(ctx context.Context, now *time.Time, email string) (queuePosition int64, rateLimit string, err error) { + var result []redis.Cmder + result, err = c.queueDB.TxPipelined(ctx, func(pipeliner redis.Pipeliner) error { + if zErr := pipeliner.ZAddNX(ctx, loginQueueKey, redis.Z{ + Score: float64(now.Nanosecond()), + Member: email, + }).Err(); zErr != nil { + return zErr //nolint:wrapcheck // . + } + if zRankErr := pipeliner.ZRank(ctx, loginQueueKey, email).Err(); zRankErr != nil { + return zRankErr //nolint:wrapcheck // . + } + + return pipeliner.Get(ctx, loginRateLimitKey).Err() + }) + if err != nil { + return 0, "", errors.Wrapf(err, "failed to enqueue email") + } + errs := make([]error, 0, len(result)) + for idx := 2; idx >= 0; idx-- { + cmdRes := result[idx] + if cmdRes.Err() != nil { + errs = append(errs, errors.Wrapf(cmdRes.Err(), "failed to enqueue email because of failed %v", cmdRes.String())) + + continue + } + switch idx { + case 2: //nolint:gomnd // Index in pipeline. + strCmd := cmdRes.(*redis.StringCmd) //nolint:errcheck,forcetypeassert // . + rateLimit = strCmd.Val() + case 1: + intCmd := cmdRes.(*redis.IntCmd) //nolint:errcheck,forcetypeassert // . + queuePosition = intCmd.Val() + case 0: + intCmd := cmdRes.(*redis.IntCmd) //nolint:errcheck,forcetypeassert // . + if intCmd.Val() == 0 { + return queuePosition, rateLimit, errAlreadyEnqueued + } + } + } + if cmdErr := multierror.Append(nil, errs...).ErrorOrNil(); cmdErr != nil { + return queuePosition, rateLimit, errors.Wrapf(cmdErr, "failed to enqueue email %v", email) + } + + return queuePosition, rateLimit, nil +} + +//nolint:funlen,gocognit,revive,contextcheck // Keep processing in signle place. +func (c *client) processEmailQueue(rootCtx context.Context) { + lastProcessed := time.Now() + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + locked := false + defer func() { + if locked { + log.Error(errors.Wrapf(c.emailQueueLock.Unlock(ctx), "failed to unlock pg advisory emailQueueLock for email queue")) + } + }() + for rootCtx.Err() == nil { + var err error + locked, err = c.emailQueueLock.Obtain(ctx) //nolint:contextcheck // Background context. + if err != nil { + log.Panic(errors.Wrapf(err, "failed to obtain emailQueueLock for email queue")) + } + if !locked { + _ = wait(rootCtx, stdlibtime.Duration(1+rand.IntN(4))*stdlibtime.Second) //nolint:errcheck,gosec,gomnd // Nothing to rollback. + + continue + } + now := time.Now() + emails, scores, rateLimit, err := c.dequeueNextEmails(ctx) //nolint:contextcheck // Background context. + if err != nil { + log.Error(errors.Wrapf(err, "failed to fetch next %v emails in queue", c.cfg.EmailSendBatchSize)) + + continue + } + if len(emails) == 0 { + _ = wait(rootCtx, 10*stdlibtime.Second) //nolint:errcheck,gomnd // Nothing to rollback. + log.Info("No emails in queue for sending") + + continue + } + loginInformation, err := c.fetchLoginInformationForEmailBatch(ctx, now, emails) //nolint:contextcheck // Background context. + if err != nil { + log.Error(errors.Wrapf(err, "failed to fetch login information for emails: %v", emails)) + + continue + } + rlCount, rlDuration, rlErr := parseRateLimit(rateLimit) + if rlErr != nil { + log.Panic(errors.Wrapf(rlErr, "failed to parse rate limit for email queue %v", rateLimit)) //nolint:revive // . + + continue + } + lastTimeBatchProcessingDuration := time.Now().Sub(*lastProcessed.Time) + rateLimitEstimationDuration := lastTimeBatchProcessingDuration * stdlibtime.Duration(int64(rlCount)/c.cfg.EmailSendBatchSize) + if rateLimitEstimationDuration < rlDuration { + oneBatchProcessingTimeToRespectRateLimit := stdlibtime.Duration(c.cfg.EmailSendBatchSize/int64(rlCount)) * rlDuration + if wait(rootCtx, oneBatchProcessingTimeToRespectRateLimit) != nil { + //nolint:contextcheck // Background context. + log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(ctx, emails, scores), "failed to rollback fetched emails %#v back to queue", emails)) + } + } + + if failed, sErr := c.sendEmails(ctx, loginInformation); sErr != nil { //nolint:contextcheck // Background context. + log.Error(errors.Wrapf(sErr, "failed to send email batch for emails %#v", failed)) + log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(ctx, failed, scores), "failed to rollback failed emails %#v back to queue", failed)) + } + lastProcessed = time.Now() + stdlibtime.Sleep(1 * stdlibtime.Second) + } +} + +func (c *client) rollbackEmailsBackToQueue(ctx context.Context, failed []string, scores map[string]int64) error { + failedZ := make([]redis.Z, 0, len(failed)) + for _, failedEmail := range failed { + failedZ = append(failedZ, redis.Z{ + Score: float64(scores[failedEmail]), + Member: failedEmail, + }) + } + + return errors.Wrapf(c.queueDB.ZAdd(ctx, loginQueueKey, failedZ...).Err(), "failed to rollback unsent emails %#v", failed) +} + +//nolint:gocritic,revive // We need all the results from the pipeline +func (c *client) dequeueNextEmails(ctx context.Context) (emailsBatch []string, scores map[string]int64, rateLimit string, err error) { + var pipeRes []redis.Cmder + pipeRes, err = c.queueDB.TxPipelined(ctx, func(pipeliner redis.Pipeliner) error { + if zpopErr := pipeliner.ZPopMin(ctx, loginQueueKey, c.cfg.EmailSendBatchSize).Err(); zpopErr != nil { + return zpopErr //nolint:wrapcheck // . + } + + return pipeliner.Get(ctx, loginRateLimitKey).Err() + }) + if err != nil { + return nil, nil, "", errors.Wrapf(err, "failed to fetch email queue batch") + } + if zpopErr := pipeRes[0].Err(); zpopErr != nil { + return nil, nil, "", errors.Wrapf(zpopErr, "failed to fetch %v email queue batch", pipeRes[0].String()) + } + if len(pipeRes) > 1 { + if rateErr := pipeRes[1].Err(); rateErr != nil { + return nil, nil, "", errors.Wrapf(rateErr, "failed to fetch %v email sending rate", pipeRes[1].String()) + } + } + batch := pipeRes[0].(*redis.ZSliceCmd).Val() //nolint:forcetypeassert // . + emailsBatch = make([]string, 0, len(batch)) + scores = make(map[string]int64, 0) + for _, itemInBatch := range batch { + emailsBatch = append(emailsBatch, itemInBatch.Member.(string)) //nolint:forcetypeassert // . + scores[emailsBatch[len(emailsBatch)-1]] = int64(itemInBatch.Score) + } + rate := pipeRes[1].(*redis.StringCmd).Val() //nolint:forcetypeassert // . + + return emailsBatch, scores, rate, nil +} + +func (c *client) fetchLoginInformationForEmailBatch(ctx context.Context, now *time.Time, emails []string) ([]*emailLinkSignIn, error) { + sql := fmt.Sprintf(` + SELECT * FROM public.email_link_sign_ins + WHERE email = ANY($1) AND created_at > ($2::TIMESTAMP - (%[2]v * interval '1 second')) + ORDER BY created_at DESC + LIMIT %[1]v;`, c.cfg.EmailSendBatchSize, c.cfg.EmailValidation.ExpirationTime.Seconds()) + res, err := storage.Select[emailLinkSignIn](ctx, c.db, sql, emails, now.Time) + + return res, err +} + +func parseRateLimit(rateLimit string) (int, stdlibtime.Duration, error) { + spl := strings.Split(rateLimit, ":") + rateLimitCount, rlErr := strconv.Atoi(spl[0]) + if rlErr != nil { + return 0, stdlibtime.Duration(0), rlErr + } + rateLimitDuration, rlErr := stdlibtime.ParseDuration(spl[1]) + if rlErr != nil { + return 0, stdlibtime.Duration(0), rlErr + } + + return rateLimitCount, rateLimitDuration, nil +} + +func (c *client) sendEmails(ctx context.Context, emails []*emailLinkSignIn) (failed []string, err error) { + emailsByLanguage := make(map[string][]string) + confCodesByLanguage := make(map[string][]string) + for _, email := range emails { + emailsByLanguage[email.Language] = append(emailsByLanguage[email.Language], email.Email) + confCodesByLanguage[email.Language] = append(confCodesByLanguage[email.Language], email.ConfirmationCode) + } + var mErr *multierror.Error + for language := range emailsByLanguage { + if sErr := c.sendEmailWithType(ctx, signInEmailType, language, emailsByLanguage[language], confCodesByLanguage[language]); sErr != nil { + mErr = multierror.Append(mErr, errors.Wrapf(sErr, "failed to send emails for language %v: %#v", language, emailsByLanguage[language])) + failed = append(failed, emailsByLanguage[language]...) + } + } + + return failed, mErr.ErrorOrNil() //nolint:wrapcheck // . +} + +func wait(ctx context.Context, d stdlibtime.Duration) error { + select { + case <-stdlibtime.After(d): + return nil + case <-ctx.Done(): + return context.Canceled + } +} diff --git a/auth/email_link/translations/email/modify_email/af.html b/auth/email_link/translations/email/modify_email/af.html index e3ce8fb2..1d96ec58 100644 --- a/auth/email_link/translations/email/modify_email/af.html +++ b/auth/email_link/translations/email/modify_email/af.html @@ -3,8 +3,8 @@ -->

Hallo {{.PetName}},

-

Ons het 'n versoek ontvang om by {{.AppName}} aan te meld met hierdie e-posadres. As jy met jou {{.Email}} rekening wil aanmeld, gebruik hierdie bevestigingskode:

-

{{.ConfirmationCode}}

+

Ons het 'n versoek ontvang om by {{.AppName}} aan te meld met hierdie e-posadres. As jy met jou -email- rekening wil aanmeld, gebruik hierdie bevestigingskode:

+

-conf_code-

As jy nie hierdie kode aangevra het nie, kan jy hierdie e-pos veilig ignoreer.

Dankie,

{{.TeamName}}-span

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/am.html b/auth/email_link/translations/email/modify_email/am.html index 2aeb3fb4..e3b0f714 100644 --- a/auth/email_link/translations/email/modify_email/am.html +++ b/auth/email_link/translations/email/modify_email/am.html @@ -3,8 +3,8 @@ -->

ሰላም {{.PetName}},

-

እነዚህን የኢሜል አድራሻ በመጠቀም ለ {{.AppName}} መግባት ጥያቄ ተቀብለናል። በ {{.Email}} አካውንት መግባት ከፈለጉ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

-

{{.ConfirmationCode}}

+

እነዚህን የኢሜል አድራሻ በመጠቀም ለ {{.AppName}} መግባት ጥያቄ ተቀብለናል። በ -email- አካውንት መግባት ከፈለጉ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

+

-conf_code-

ይህን ኮድ ካልጠየቁ፣ ይህን ኢሜል ማለፍ ይችላሉ።

አመሰግናለሁ,

{{.TeamName}} ቡድን

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ar.html b/auth/email_link/translations/email/modify_email/ar.html index c8b69511..dbab723a 100644 --- a/auth/email_link/translations/email/modify_email/ar.html +++ b/auth/email_link/translations/email/modify_email/ar.html @@ -3,8 +3,8 @@ -->

مرحبًا {{.PetName}}،

-

لقد تلقينا طلبًا لتسجيل الدخول إلى {{.AppName}} باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول باستخدام حساب {{.Email}} الخاص بك، فاستخدم رمز التأكيد هذا:

-

{{.ConfirmationCode}}

+

لقد تلقينا طلبًا لتسجيل الدخول إلى {{.AppName}} باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول باستخدام حساب -email- الخاص بك، فاستخدم رمز التأكيد هذا:

+

-conf_code-

إذا لم تطلب هذا الرمز، يمكنك تجاهل هذا البريد الإلكتروني بأمان.

شكرًا،

فريق {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/az.html b/auth/email_link/translations/email/modify_email/az.html index f2f7732f..71c41501 100644 --- a/auth/email_link/translations/email/modify_email/az.html +++ b/auth/email_link/translations/email/modify_email/az.html @@ -3,8 +3,8 @@ -->

Salam {{.PetName}},

-

Bu e-poçt ünvanından istifadə edərək {{.AppName}}-ə daxil olmaq üçün sorğu aldıq. {{.Email}} hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

-

{{.ConfirmationCode}}

+

Bu e-poçt ünvanından istifadə edərək {{.AppName}}-ə daxil olmaq üçün sorğu aldıq. -email- hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

+

-conf_code-

Bu kodu tələb etməmisinizsə, bu e-poçtu etibarlı şəkildə yaddan çıxara bilərsiniz.

Təşəkkürlər,

{{.TeamName}} komandası

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/bg.html b/auth/email_link/translations/email/modify_email/bg.html index a916b31f..bc362481 100644 --- a/auth/email_link/translations/email/modify_email/bg.html +++ b/auth/email_link/translations/email/modify_email/bg.html @@ -3,8 +3,8 @@ -->

Здравейте {{.PetName}},

-

Получихме заявка за влизане в {{.AppName}}, използвайки този имейл адрес. Ако искате да влезете с акаунта си {{.Email}}, използвайте този код за потвърждение:

-

{{.ConfirmationCode}}

+

Получихме заявка за влизане в {{.AppName}}, използвайки този имейл адрес. Ако искате да влезете с акаунта си -email-, използвайте този код за потвърждение:

+

-conf_code-

Ако не сте заявявали този код, можете спокойно да игнорирате този имейл.

Благодарим ви,

Екипът на {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/bn.html b/auth/email_link/translations/email/modify_email/bn.html index de80da30..b9f52d5a 100644 --- a/auth/email_link/translations/email/modify_email/bn.html +++ b/auth/email_link/translations/email/modify_email/bn.html @@ -3,8 +3,8 @@ -->

হাই {{.PetName}},

-

আমরা এই ইমেল ঠিকানা ব্যবহার করে {{.AppName}} এ সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার {{.Email}} অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তাহলে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

-

{{.ConfirmationCode}}

+

আমরা এই ইমেল ঠিকানা ব্যবহার করে {{.AppName}} এ সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার -email- অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তাহলে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

+

-conf_code-

যদি আপনি এই কোডটির অনুরোধ না করে থাকেন, তাহলে আপনি নিরাপদে এই ইমেলটি উপেক্ষা করতে পারেন।

ধন্যবাদ,

{{.TeamName}} টিম

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/cs.html b/auth/email_link/translations/email/modify_email/cs.html index 4e215746..058628c1 100644 --- a/auth/email_link/translations/email/modify_email/cs.html +++ b/auth/email_link/translations/email/modify_email/cs.html @@ -3,8 +3,8 @@ -->

Ahoj {{.PetName}},

-

Obdrželi jsme žádost o přihlášení k {{.AppName}} pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí účtu {{.Email}}, použijte tento potvrzovací kód:

-

{{.ConfirmationCode}}

+

Obdrželi jsme žádost o přihlášení k {{.AppName}} pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí účtu -email-, použijte tento potvrzovací kód:

+

-conf_code-

Pokud jste tento kód nepožadovali, můžete tento e-mail bezpečně ignorovat.

Děkujeme,

Tým {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/de.html b/auth/email_link/translations/email/modify_email/de.html index c76ff0aa..dc9f2393 100644 --- a/auth/email_link/translations/email/modify_email/de.html +++ b/auth/email_link/translations/email/modify_email/de.html @@ -3,8 +3,8 @@ -->

Hallo {{.PetName}},

-

Wir haben eine Anfrage zum Anmelden bei {{.AppName}} mit dieser E-Mail-Adresse erhalten. Wenn Sie sich mit Ihrem {{.Email}} Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

-

{{.ConfirmationCode}}

+

Wir haben eine Anfrage zum Anmelden bei {{.AppName}} mit dieser E-Mail-Adresse erhalten. Wenn Sie sich mit Ihrem -email- Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

+

-conf_code-

Wenn Sie diesen Code nicht angefordert haben, können Sie diese E-Mail sicher ignorieren.

Danke,

Das {{.TeamName}}-Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/el.html b/auth/email_link/translations/email/modify_email/el.html index d6c2c7ae..47d6d070 100644 --- a/auth/email_link/translations/email/modify_email/el.html +++ b/auth/email_link/translations/email/modify_email/el.html @@ -3,8 +3,8 @@ -->

Γεια σας {{.PetName}},

-

Λάβαμε ένα αίτημα για σύνδεση στο {{.AppName}} χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας {{.Email}}, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

-

{{.ConfirmationCode}}

+

Λάβαμε ένα αίτημα για σύνδεση στο {{.AppName}} χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας -email-, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

+

-conf_code-

Αν δεν ζητήσατε αυτόν τον κωδικό, μπορείτε να αγνοήσετε με ασφάλεια αυτό το email.

Ευχαριστούμε,

Η ομάδα {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/en.html b/auth/email_link/translations/email/modify_email/en.html index bd36fc32..f2152d9b 100644 --- a/auth/email_link/translations/email/modify_email/en.html +++ b/auth/email_link/translations/email/modify_email/en.html @@ -3,8 +3,8 @@ -->

Hi {{.PetName}},

-

We received a request to sign in to {{.AppName}} using this email address. If you want to sign in with your {{.Email}} account, use this confirmation code:

-

{{.ConfirmationCode}}

+

We received a request to sign in to {{.AppName}} using this email address. If you want to sign in with your -email- account, use this confirmation code:

+

-conf_code-

If you did not request this code, you can safely ignore this email.

Thanks,

{{.TeamName}} Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/es.html b/auth/email_link/translations/email/modify_email/es.html index dfba5b72..29eec40b 100644 --- a/auth/email_link/translations/email/modify_email/es.html +++ b/auth/email_link/translations/email/modify_email/es.html @@ -3,8 +3,8 @@ -->

Hola {{.PetName}},

-

Hemos recibido una solicitud para iniciar sesión en {{.AppName}} usando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta {{.Email}}, utiliza este código de confirmación:

-

{{.ConfirmationCode}}

+

Hemos recibido una solicitud para iniciar sesión en {{.AppName}} usando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta -email-, utiliza este código de confirmación:

+

-conf_code-

Si no solicitaste este código, puedes ignorar este correo electrónico de manera segura.

Gracias,

Equipo de {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/fa.html b/auth/email_link/translations/email/modify_email/fa.html index a536b964..d0000033 100644 --- a/auth/email_link/translations/email/modify_email/fa.html +++ b/auth/email_link/translations/email/modify_email/fa.html @@ -3,8 +3,8 @@ -->

سلام {{.PetName}}،

-

ما درخواستی برای ورود به {{.AppName}} با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب {{.Email}} خود وارد شوید، از این کد تأیید استفاده کنید:

-

{{.ConfirmationCode}}

+

ما درخواستی برای ورود به {{.AppName}} با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب -email- خود وارد شوید، از این کد تأیید استفاده کنید:

+

-conf_code-

اگر این کد را درخواست نکرده‌اید، می‌توانید به راحتی این ایمیل را نادیده بگیرید.

با تشکر،

تیم {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/fr.html b/auth/email_link/translations/email/modify_email/fr.html index 9709b38b..9effff5a 100644 --- a/auth/email_link/translations/email/modify_email/fr.html +++ b/auth/email_link/translations/email/modify_email/fr.html @@ -3,8 +3,8 @@ -->

Bonjour {{.PetName}},

-

Nous avons reçu une demande de connexion à {{.AppName}} utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte {{.Email}}, utilisez ce code de confirmation :

-

{{.ConfirmationCode}}

+

Nous avons reçu une demande de connexion à {{.AppName}} utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte -email-, utilisez ce code de confirmation :

+

-conf_code-

Si vous n'avez pas demandé ce code, vous pouvez ignorer cet e-mail en toute sécurité.

Merci,

L'équipe {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/gu.html b/auth/email_link/translations/email/modify_email/gu.html index 9cd640cc..6d086683 100644 --- a/auth/email_link/translations/email/modify_email/gu.html +++ b/auth/email_link/translations/email/modify_email/gu.html @@ -3,8 +3,8 @@ -->

હાય {{.PetName}},

-

અમને આ ઇમેઇલ સરનામું વાપરીને {{.AppName}} માં સાઇન ઇન કરવાની વિનંતી મળી છે. જો તમે તમારા {{.Email}} ખાતા સાથે સાઇન ઇન કરવા માંગતા હો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

-

{{.ConfirmationCode}}

+

અમને આ ઇમેઇલ સરનામું વાપરીને {{.AppName}} માં સાઇન ઇન કરવાની વિનંતી મળી છે. જો તમે તમારા -email- ખાતા સાથે સાઇન ઇન કરવા માંગતા હો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

+

-conf_code-

જો તમે આ કોડની વિનંતી ન કરી હોય, તો તમે આ ઇમેઇલને સુરક્ષિત રીતે અવગણો છો.

આભાર,

{{.TeamName}} ટીમ

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/he.html b/auth/email_link/translations/email/modify_email/he.html index c60b3fd8..33866e2c 100644 --- a/auth/email_link/translations/email/modify_email/he.html +++ b/auth/email_link/translations/email/modify_email/he.html @@ -3,8 +3,8 @@ -->

שלום {{.PetName}},

-

קיבלנו בקשה להתחבר ל-{{.AppName}} באמצעות כתובת דוא"ל זו. אם ברצונך להתחבר עם חשבון {{.Email}} שלך, השתמש בקוד האישור הזה:

-

{{.ConfirmationCode}}

+

קיבלנו בקשה להתחבר ל-{{.AppName}} באמצעות כתובת דוא"ל זו. אם ברצונך להתחבר עם חשבון -email- שלך, השתמש בקוד האישור הזה:

+

-conf_code-

אם לא ביקשת קוד זה, תוכל להתעלם מדוא"ל זה בבטחה.

תודה,

צוות {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/hi.html b/auth/email_link/translations/email/modify_email/hi.html index 96e9cfb0..d9a9736a 100644 --- a/auth/email_link/translations/email/modify_email/hi.html +++ b/auth/email_link/translations/email/modify_email/hi.html @@ -3,8 +3,8 @@ -->

नमस्ते {{.PetName}},

-

हमें इस ईमेल पते का उपयोग करके {{.AppName}} में साइन इन करने का अनुरोध प्राप्त हुआ है। यदि आप अपने {{.Email}} खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

-

{{.ConfirmationCode}}

+

हमें इस ईमेल पते का उपयोग करके {{.AppName}} में साइन इन करने का अनुरोध प्राप्त हुआ है। यदि आप अपने -email- खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

+

-conf_code-

यदि आपने इस कोड का अनुरोध नहीं किया है, तो आप इस ईमेल को सुरक्षित रूप से अनदेखा कर सकते हैं।

धन्यवाद,

{{.TeamName}} टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/hu.html b/auth/email_link/translations/email/modify_email/hu.html index e75ac55c..9200651b 100644 --- a/auth/email_link/translations/email/modify_email/hu.html +++ b/auth/email_link/translations/email/modify_email/hu.html @@ -3,8 +3,8 @@ -->

Szia {{.PetName}},

-

Kaptunk egy kérést, hogy jelentkezz be a {{.AppName}}-ba ezzel az email címmel. Ha a {{.Email}} fiókoddal szeretnél bejelentkezni, használd ezt a megerősítő kódot:

-

{{.ConfirmationCode}}

+

Kaptunk egy kérést, hogy jelentkezz be a {{.AppName}}-ba ezzel az email címmel. Ha a -email- fiókoddal szeretnél bejelentkezni, használd ezt a megerősítő kódot:

+

-conf_code-

Ha nem kérted ezt a kódot, biztonságosan figyelmen kívül hagyhatod ezt az emailt.

Köszönöm,

{{.TeamName}} csapat

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/id.html b/auth/email_link/translations/email/modify_email/id.html index 574e4123..afca5f36 100644 --- a/auth/email_link/translations/email/modify_email/id.html +++ b/auth/email_link/translations/email/modify_email/id.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami menerima permintaan untuk masuk ke {{.AppName}} menggunakan alamat email ini. Jika Anda ingin masuk dengan akun {{.Email}} Anda, gunakan kode konfirmasi ini:

-

{{.ConfirmationCode}}

+

Kami menerima permintaan untuk masuk ke {{.AppName}} menggunakan alamat email ini. Jika Anda ingin masuk dengan akun -email- Anda, gunakan kode konfirmasi ini:

+

-conf_code-

Jika Anda tidak meminta kode ini, Anda dapat mengabaikan email ini dengan aman.

Terima kasih,

Tim {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/it.html b/auth/email_link/translations/email/modify_email/it.html index f2e04952..d1332762 100644 --- a/auth/email_link/translations/email/modify_email/it.html +++ b/auth/email_link/translations/email/modify_email/it.html @@ -3,8 +3,8 @@ -->

Ciao {{.PetName}},

-

Abbiamo ricevuto una richiesta per accedere a {{.AppName}} utilizzando questo indirizzo email. Se desideri accedere con il tuo account {{.Email}}, utilizza questo codice di conferma:

-

{{.ConfirmationCode}}

+

Abbiamo ricevuto una richiesta per accedere a {{.AppName}} utilizzando questo indirizzo email. Se desideri accedere con il tuo account -email-, utilizza questo codice di conferma:

+

-conf_code-

Se non hai richiesto questo codice, puoi ignorare questa email in tutta sicurezza.

Grazie,

Il team di {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ja.html b/auth/email_link/translations/email/modify_email/ja.html index bdd257fe..1719a4f4 100644 --- a/auth/email_link/translations/email/modify_email/ja.html +++ b/auth/email_link/translations/email/modify_email/ja.html @@ -3,8 +3,8 @@ -->

こんにちは {{.PetName}}、

-

このメールアドレスを使用して{{.AppName}}にサインインするリクエストを受け取りました。 {{.Email}}アカウントでサインインする場合は、この確認コードを使用してください:

-

{{.ConfirmationCode}}

+

このメールアドレスを使用して{{.AppName}}にサインインするリクエストを受け取りました。 -email-アカウントでサインインする場合は、この確認コードを使用してください:

+

-conf_code-

このコードを要求していない場合は、このメールを無視してください。

ありがとう、

{{.TeamName}}チーム

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/jv.html b/auth/email_link/translations/email/modify_email/jv.html index f73cebc4..3e8687f6 100644 --- a/auth/email_link/translations/email/modify_email/jv.html +++ b/auth/email_link/translations/email/modify_email/jv.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami nampi panyuwunan kanggo mlebu menyang {{.AppName}} nganggo alamat email iki. Yen sampeyan pengin mlebu nganggo akun {{.Email}} sampeyan, gunakake kode konfirmasi iki:

-

{{.ConfirmationCode}}

+

Kami nampi panyuwunan kanggo mlebu menyang {{.AppName}} nganggo alamat email iki. Yen sampeyan pengin mlebu nganggo akun -email- sampeyan, gunakake kode konfirmasi iki:

+

-conf_code-

Yen sampeyan ora nyuwun kode iki, sampeyan bisa nglirwakake email iki kanthi aman.

Matur nuwun,

Tim {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/kn.html b/auth/email_link/translations/email/modify_email/kn.html index b733be58..edd57859 100644 --- a/auth/email_link/translations/email/modify_email/kn.html +++ b/auth/email_link/translations/email/modify_email/kn.html @@ -3,8 +3,8 @@ -->

ನಮಸ್ಕಾರ {{.PetName}},

-

ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿ {{.AppName}} ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವ ವಿನಂತಿಯನ್ನು ನಾವು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ {{.Email}} ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

-

{{.ConfirmationCode}}

+

ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿ {{.AppName}} ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವ ವಿನಂತಿಯನ್ನು ನಾವು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ -email- ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

+

-conf_code-

ನೀವು ಈ ಕೋಡ್ ಅನ್ನು ಕೇಳದಿದ್ದರೆ, ನೀವು ಈ ಇಮೇಲ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ನಿರ್ಲಕ್ಷಿಸಬಹುದು.

ಧನ್ಯವಾದಗಳು,

{{.TeamName}} ತಂಡ

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ko.html b/auth/email_link/translations/email/modify_email/ko.html index 9d01a88a..b3e9a7cc 100644 --- a/auth/email_link/translations/email/modify_email/ko.html +++ b/auth/email_link/translations/email/modify_email/ko.html @@ -3,8 +3,8 @@ -->

안녕하세요 {{.PetName}},

-

이 이메일 주소를 사용하여 {{.AppName}}에 로그인하려는 요청을 받았습니다. {{.Email}} 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

-

{{.ConfirmationCode}}

+

이 이메일 주소를 사용하여 {{.AppName}}에 로그인하려는 요청을 받았습니다. -email- 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

+

-conf_code-

이 코드를 요청하지 않은 경우 이 이메일을 무시해도 안전합니다.

감사합니다,

{{.TeamName}} 팀

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/mr.html b/auth/email_link/translations/email/modify_email/mr.html index 77b1a5e9..d804af4f 100644 --- a/auth/email_link/translations/email/modify_email/mr.html +++ b/auth/email_link/translations/email/modify_email/mr.html @@ -3,8 +3,8 @@ -->

हाय {{.PetName}},

-

आम्हाला या ईमेल पत्त्याचा वापर करून {{.AppName}} मध्ये साइन इन करण्याची विनंती मिळाली आहे. आपण आपल्या {{.Email}} खात्याने साइन इन करू इच्छित असल्यास, हा पुष्टीकरण कोड वापरा:

-

{{.ConfirmationCode}}

+

आम्हाला या ईमेल पत्त्याचा वापर करून {{.AppName}} मध्ये साइन इन करण्याची विनंती मिळाली आहे. आपण आपल्या -email- खात्याने साइन इन करू इच्छित असल्यास, हा पुष्टीकरण कोड वापरा:

+

-conf_code-

जर आपण या कोडची विनंती केली नसेल, तर आपण हे ईमेल सुरक्षितपणे दुर्लक्ष करू शकता.

धन्यवाद,

{{.TeamName}} टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ms.html b/auth/email_link/translations/email/modify_email/ms.html index 880233ed..22f22aee 100644 --- a/auth/email_link/translations/email/modify_email/ms.html +++ b/auth/email_link/translations/email/modify_email/ms.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami menerima permintaan untuk log masuk ke {{.AppName}} menggunakan alamat e-mel ini. Jika anda ingin log masuk dengan akaun {{.Email}} anda, gunakan kod pengesahan ini:

-

{{.ConfirmationCode}}

+

Kami menerima permintaan untuk log masuk ke {{.AppName}} menggunakan alamat e-mel ini. Jika anda ingin log masuk dengan akaun -email- anda, gunakan kod pengesahan ini:

+

-conf_code-

Jika anda tidak meminta kod ini, anda boleh mengabaikan e-mel ini dengan selamat.

Terima kasih,

Pasukan {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/nb.html b/auth/email_link/translations/email/modify_email/nb.html index cba83e7a..c46a59f7 100644 --- a/auth/email_link/translations/email/modify_email/nb.html +++ b/auth/email_link/translations/email/modify_email/nb.html @@ -3,8 +3,8 @@ -->

Hei {{.PetName}},

-

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

-

{{.ConfirmationCode}}

+

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

+

-conf_code-

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,

{{.TeamName}}-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/nn.html b/auth/email_link/translations/email/modify_email/nn.html index cba83e7a..c46a59f7 100644 --- a/auth/email_link/translations/email/modify_email/nn.html +++ b/auth/email_link/translations/email/modify_email/nn.html @@ -3,8 +3,8 @@ -->

Hei {{.PetName}},

-

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

-

{{.ConfirmationCode}}

+

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

+

-conf_code-

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,

{{.TeamName}}-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/pa-in.html b/auth/email_link/translations/email/modify_email/pa-in.html index f0d8f084..30e1c745 100644 --- a/auth/email_link/translations/email/modify_email/pa-in.html +++ b/auth/email_link/translations/email/modify_email/pa-in.html @@ -3,8 +3,8 @@ -->

ਹੈਲੋ {{.PetName}},

-

ਸਾਨੂੰ ਇਸ ਈਮੇਲ ਪਤੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ {{.AppName}} ਵਿੱਚ ਸਾਇਨ ਇਨ ਕਰਨ ਦੀ ਬੇਨਤੀ ਮਿਲੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ {{.Email}} ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦੀ ਵਰਤੋਂ ਕਰੋ:

-

{{.ConfirmationCode}}

+

ਸਾਨੂੰ ਇਸ ਈਮੇਲ ਪਤੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ {{.AppName}} ਵਿੱਚ ਸਾਇਨ ਇਨ ਕਰਨ ਦੀ ਬੇਨਤੀ ਮਿਲੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ -email- ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦੀ ਵਰਤੋਂ ਕਰੋ:

+

-conf_code-

ਜੇ ਤੁਸੀਂ ਇਸ ਕੋਡ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਈਮੇਲ ਨੂੰ ਸੁਰੱਖਿਅਤ ਤੌਰ ਤੇ ਅਣਡਿੱਠ ਕਰ ਸਕਦੇ ਹੋ।

ਧੰਨਵਾਦ,

{{.TeamName}} ਟੀਮ

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/pl.html b/auth/email_link/translations/email/modify_email/pl.html index 54b6c30b..d6c5ba49 100644 --- a/auth/email_link/translations/email/modify_email/pl.html +++ b/auth/email_link/translations/email/modify_email/pl.html @@ -3,8 +3,8 @@ -->

Witaj {{.PetName}},

-

Otrzymaliśmy prośbę o zalogowanie się do {{.AppName}} przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się za pomocą konta {{.Email}}, użyj tego kodu potwierdzającego:

-

{{.ConfirmationCode}}

+

Otrzymaliśmy prośbę o zalogowanie się do {{.AppName}} przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się za pomocą konta -email-, użyj tego kodu potwierdzającego:

+

-conf_code-

Jeśli nie żądałeś tego kodu, możesz bezpiecznie zignorować tego e-maila.

Dziękujemy,

Zespół {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ps.html b/auth/email_link/translations/email/modify_email/ps.html index c9390f10..f8dcd713 100644 --- a/auth/email_link/translations/email/modify_email/ps.html +++ b/auth/email_link/translations/email/modify_email/ps.html @@ -3,8 +3,8 @@ -->

سلام {{.PetName}}،

-

موږ د دې بریښنالیک پته په کارولو سره {{.AppName}} ته د ننوتلو غوښتنه ترلاسه کړه. که تاسو غواړئ د خپل {{.Email}} حساب سره ننوځئ، دا تایید کوډ وکاروئ:

-

{{.ConfirmationCode}}

+

موږ د دې بریښنالیک پته په کارولو سره {{.AppName}} ته د ننوتلو غوښتنه ترلاسه کړه. که تاسو غواړئ د خپل -email- حساب سره ننوځئ، دا تایید کوډ وکاروئ:

+

-conf_code-

که تاسو دا کوډ نه وي غوښتنه کړې، تاسو کولی شئ په خوندي توګه دا بریښنالیک له پامه وغورځوئ.

مننه،

د {{.AppName}} ټیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/pt.html b/auth/email_link/translations/email/modify_email/pt.html index 3d019af2..ccc01b67 100644 --- a/auth/email_link/translations/email/modify_email/pt.html +++ b/auth/email_link/translations/email/modify_email/pt.html @@ -3,8 +3,8 @@ -->

Olá {{.PetName}},

-

Recebemos um pedido para entrar no {{.AppName}} usando este endereço de e-mail. Se você deseja entrar com sua conta {{.Email}}, use este código de confirmação:

-

{{.ConfirmationCode}}

+

Recebemos um pedido para entrar no {{.AppName}} usando este endereço de e-mail. Se você deseja entrar com sua conta -email-, use este código de confirmação:

+

-conf_code-

Se você não solicitou este código, pode ignorar este e-mail com segurança.

Obrigado,

Equipe {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ro.html b/auth/email_link/translations/email/modify_email/ro.html index 6a1f514a..0aafbbbd 100644 --- a/auth/email_link/translations/email/modify_email/ro.html +++ b/auth/email_link/translations/email/modify_email/ro.html @@ -3,8 +3,8 @@ -->

Bună {{.PetName}},

-

Am primit o solicitare pentru a vă conecta la {{.AppName}} folosind această adresă de email. Dacă doriți să vă conectați cu contul dvs. {{.Email}}, folosiți acest cod de confirmare:

-

{{.ConfirmationCode}}

+

Am primit o solicitare pentru a vă conecta la {{.AppName}} folosind această adresă de email. Dacă doriți să vă conectați cu contul dvs. -email-, folosiți acest cod de confirmare:

+

-conf_code-

Dacă nu ați solicitat acest cod, puteți ignora acest email în siguranță.

Mulțumim,

Echipa {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ru.html b/auth/email_link/translations/email/modify_email/ru.html index 8fa90038..b699e5e3 100644 --- a/auth/email_link/translations/email/modify_email/ru.html +++ b/auth/email_link/translations/email/modify_email/ru.html @@ -3,8 +3,8 @@ -->

Привет {{.PetName}},

-

Мы получили запрос на вход в {{.AppName}} с использованием этого адреса электронной почты. Если вы хотите войти с вашей учетной записью {{.Email}}, используйте этот код подтверждения:

-

{{.ConfirmationCode}}

+

Мы получили запрос на вход в {{.AppName}} с использованием этого адреса электронной почты. Если вы хотите войти с вашей учетной записью -email-, используйте этот код подтверждения:

+

-conf_code-

Если вы не запрашивали этот код, вы можете спокойно проигнорировать это письмо.

Спасибо,

Команда {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sd.html b/auth/email_link/translations/email/modify_email/sd.html index f2813153..8975d8aa 100644 --- a/auth/email_link/translations/email/modify_email/sd.html +++ b/auth/email_link/translations/email/modify_email/sd.html @@ -3,8 +3,8 @@ -->

هيلو {{.PetName}}،

-

اسان کي هي اي ميل ايڊريس استعمال ڪندي {{.AppName}} ۾ سائن ان ڪرڻ جي درخواست ملي آهي. جيڪڏهن توهان پنهنجي {{.Email}} اڪائونٽ سان سائن ان ڪرڻ چاهيو ٿا، ته هن تصديق ڪوڊ کي استعمال ڪريو:

-

{{.ConfirmationCode}}

+

اسان کي هي اي ميل ايڊريس استعمال ڪندي {{.AppName}} ۾ سائن ان ڪرڻ جي درخواست ملي آهي. جيڪڏهن توهان پنهنجي -email- اڪائونٽ سان سائن ان ڪرڻ چاهيو ٿا، ته هن تصديق ڪوڊ کي استعمال ڪريو:

+

-conf_code-

جيڪڏهن توهان هن ڪوڊ جي درخواست نه ڪئي آهي، ته توهان هن اي ميل کي محفوظ طريقي سان نظرانداز ڪري سگهو ٿا.

مهرباني،

{{.TeamName}} ٽيم

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sk.html b/auth/email_link/translations/email/modify_email/sk.html index 029eb5f7..9fa92486 100644 --- a/auth/email_link/translations/email/modify_email/sk.html +++ b/auth/email_link/translations/email/modify_email/sk.html @@ -3,8 +3,8 @@ -->

Ahoj {{.PetName}},

-

Obdržali sme žiadosť o prihlásenie k {{.AppName}} pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou účtu {{.Email}}, použite tento potvrdzovací kód:

-

{{.ConfirmationCode}}

+

Obdržali sme žiadosť o prihlásenie k {{.AppName}} pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou účtu -email-, použite tento potvrdzovací kód:

+

-conf_code-

Ak ste tento kód nepožadovali, môžete tento e-mail bezpečne ignorovať.

Ďakujeme,

Tím {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sl.html b/auth/email_link/translations/email/modify_email/sl.html index 7adeb215..e03c2eca 100644 --- a/auth/email_link/translations/email/modify_email/sl.html +++ b/auth/email_link/translations/email/modify_email/sl.html @@ -3,8 +3,8 @@ -->

Zdravo {{.PetName}},

-

Prejeli smo zahtevo za prijavo v {{.AppName}} z uporabo tega e-poštnega naslova. Če želite prijaviti s svojim računom {{.Email}}, uporabite to potrditveno kodo:

-

{{.ConfirmationCode}}

+

Prejeli smo zahtevo za prijavo v {{.AppName}} z uporabo tega e-poštnega naslova. Če želite prijaviti s svojim računom -email-, uporabite to potrditveno kodo:

+

-conf_code-

Če te kode niste zahtevali, lahko to e-pošto varno prezrete.

Hvala,

Ekipa {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sq.html b/auth/email_link/translations/email/modify_email/sq.html index ba8a5daa..db84f97a 100644 --- a/auth/email_link/translations/email/modify_email/sq.html +++ b/auth/email_link/translations/email/modify_email/sq.html @@ -3,8 +3,8 @@ -->

Përshëndetje {{.PetName}},

-

Ne kemi marrë një kërkesë për të hyrë në {{.AppName}} duke përdorur këtë adresë emaili. Nëse dëshironi të identifikoheni me llogarinë tuaj {{.Email}}, përdorni këtë kod konfirmimi:

-

{{.ConfirmationCode}}

+

Ne kemi marrë një kërkesë për të hyrë në {{.AppName}} duke përdorur këtë adresë emaili. Nëse dëshironi të identifikoheni me llogarinë tuaj -email-, përdorni këtë kod konfirmimi:

+

-conf_code-

Nëse nuk e keni kërkuar këtë kod, mund ta injoroni këtë email në mënyrë të sigurt.

Faleminderit,

Ekipi {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/su.html b/auth/email_link/translations/email/modify_email/su.html index fd6d992f..0a1dd04c 100644 --- a/auth/email_link/translations/email/modify_email/su.html +++ b/auth/email_link/translations/email/modify_email/su.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami nampi paménta pikeun asup ka {{.AppName}} nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun {{.Email}} anjeun, anggo kode konfirmasi ieu:

-

{{.ConfirmationCode}}

+

Kami nampi paménta pikeun asup ka {{.AppName}} nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun -email- anjeun, anggo kode konfirmasi ieu:

+

-conf_code-

Upami anjeun henteu nyuhunkeun kode ieu, anjeun tiasa ngabaikan email ieu kalayan aman.

Hatur nuhun,

Tim {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sv.html b/auth/email_link/translations/email/modify_email/sv.html index a688e25b..e0128c27 100644 --- a/auth/email_link/translations/email/modify_email/sv.html +++ b/auth/email_link/translations/email/modify_email/sv.html @@ -3,8 +3,8 @@ -->

Hej {{.PetName}},

-

Vi har mottagit en begäran om att logga in på {{.AppName}} med denna e-postadress. Om du vill logga in med ditt {{.Email}}-konto, använd denna bekräftelsekod:

-

{{.ConfirmationCode}}

+

Vi har mottagit en begäran om att logga in på {{.AppName}} med denna e-postadress. Om du vill logga in med ditt -email--konto, använd denna bekräftelsekod:

+

-conf_code-

Om du inte har begärt denna kod kan du säkert ignorera detta e-postmeddelande.

Tack,

{{.TeamName}}-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ta.html b/auth/email_link/translations/email/modify_email/ta.html index 6ed1da2f..31687d82 100644 --- a/auth/email_link/translations/email/modify_email/ta.html +++ b/auth/email_link/translations/email/modify_email/ta.html @@ -3,8 +3,8 @@ -->

வணக்கம் {{.PetName}},

-

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி {{.AppName}} இல் உள்நுழைய வேண்டுமெனும் கோரிக்கையைப் பெற்றுள்ளோம். உங்கள் {{.Email}} கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்பாட்டு குறியீட்டைப் பயன்படுத்தவும்:

-

{{.ConfirmationCode}}

+

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி {{.AppName}} இல் உள்நுழைய வேண்டுமெனும் கோரிக்கையைப் பெற்றுள்ளோம். உங்கள் -email- கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்பாட்டு குறியீட்டைப் பயன்படுத்தவும்:

+

-conf_code-

நீங்கள் இந்த குறியீட்டை கோரவில்லை என்றால், இந்த மின்னஞ்சலைப் புறக்கணிக்கலாம்.

நன்றி,

{{.TeamName}} குழு

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/te.html b/auth/email_link/translations/email/modify_email/te.html index 7076ec13..b63c875d 100644 --- a/auth/email_link/translations/email/modify_email/te.html +++ b/auth/email_link/translations/email/modify_email/te.html @@ -3,8 +3,8 @@ -->

హలో {{.PetName}},

-

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి {{.AppName}} లో సైన్ ఇన్ చేయడానికి మేము అభ్యర్థనను స్వీకరించాము. మీ {{.Email}} ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ను ఉపయోగించండి:

-

{{.ConfirmationCode}}

+

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి {{.AppName}} లో సైన్ ఇన్ చేయడానికి మేము అభ్యర్థనను స్వీకరించాము. మీ -email- ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ను ఉపయోగించండి:

+

-conf_code-

మీరు ఈ కోడ్‌ను అభ్యర్థించలేదు అయితే, మీరు ఈ ఇమెయిల్‌ను నిర్ధాక్షిణ్యంగా లెక్కచేయకపోవచ్చు.

ధన్యవాదాలు,

{{.TeamName}} బృందం

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/th.html b/auth/email_link/translations/email/modify_email/th.html index 8b61dfe0..139420ff 100644 --- a/auth/email_link/translations/email/modify_email/th.html +++ b/auth/email_link/translations/email/modify_email/th.html @@ -3,8 +3,8 @@ -->

สวัสดี {{.PetName}},

-

เราได้รับคำขอให้ลงชื่อเข้าใช้ {{.AppName}} โดยใช้ที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี {{.Email}} ของคุณ ให้ใช้รหัสยืนยันนี้:

-

{{.ConfirmationCode}}

+

เราได้รับคำขอให้ลงชื่อเข้าใช้ {{.AppName}} โดยใช้ที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี -email- ของคุณ ให้ใช้รหัสยืนยันนี้:

+

-conf_code-

หากคุณไม่ได้ขอรหัสนี้ คุณสามารถละเว้นอีเมลนี้ได้อย่างปลอดภัย

ขอบคุณ,

ทีมงาน {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/tl-ph.html b/auth/email_link/translations/email/modify_email/tl-ph.html index 01b0d93a..9d30e210 100644 --- a/auth/email_link/translations/email/modify_email/tl-ph.html +++ b/auth/email_link/translations/email/modify_email/tl-ph.html @@ -3,8 +3,8 @@ -->

Kumusta {{.PetName}},

-

Nakatanggap kami ng kahilingan upang mag-sign in sa {{.AppName}} gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong {{.Email}} account, gamitin ang kumpirmasyon na code na ito:

-

{{.ConfirmationCode}}

+

Nakatanggap kami ng kahilingan upang mag-sign in sa {{.AppName}} gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong -email- account, gamitin ang kumpirmasyon na code na ito:

+

-conf_code-

Kung hindi mo hiningi ang code na ito, maaari mong balewalain ang email na ito ng ligtas.

Salamat,

{{.TeamName}} Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/tr.html b/auth/email_link/translations/email/modify_email/tr.html index db32c805..3a5aab83 100644 --- a/auth/email_link/translations/email/modify_email/tr.html +++ b/auth/email_link/translations/email/modify_email/tr.html @@ -3,8 +3,8 @@ -->

Merhaba {{.PetName}},

-

Bu e-posta adresini kullanarak {{.AppName}}'e giriş yapma talebi aldık. {{.Email}} hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

-

{{.ConfirmationCode}}

+

Bu e-posta adresini kullanarak {{.AppName}}'e giriş yapma talebi aldık. -email- hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

+

-conf_code-

Bu kodu talep etmediyseniz, bu e-postayı güvenle göz ardı edebilirsiniz.

Teşekkürler,

{{.TeamName}} Ekibi

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/uk.html b/auth/email_link/translations/email/modify_email/uk.html index 13fd2b3e..48b5aac4 100644 --- a/auth/email_link/translations/email/modify_email/uk.html +++ b/auth/email_link/translations/email/modify_email/uk.html @@ -3,8 +3,8 @@ -->

Привіт {{.PetName}},

-

Ми отримали запит на вхід до {{.AppName}}, використовуючи цю електронну адресу. Якщо ви хочете увійти з вашим обліковим записом {{.Email}}, використовуйте цей код підтвердження:

-

{{.ConfirmationCode}}

+

Ми отримали запит на вхід до {{.AppName}}, використовуючи цю електронну адресу. Якщо ви хочете увійти з вашим обліковим записом -email-, використовуйте цей код підтвердження:

+

-conf_code-

Якщо ви не запитували цей код, можете безпечно ігнорувати цей лист.

Дякуємо,

Команда {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ur.html b/auth/email_link/translations/email/modify_email/ur.html index 17d9a39e..39f2bb79 100644 --- a/auth/email_link/translations/email/modify_email/ur.html +++ b/auth/email_link/translations/email/modify_email/ur.html @@ -3,8 +3,8 @@ -->

ہیلو {{.PetName}}،

-

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے {{.AppName}} میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے {{.Email}} اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو، اس تصدیقی کوڈ کا استعمال کریں:

-

{{.ConfirmationCode}}

+

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے {{.AppName}} میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے -email- اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو، اس تصدیقی کوڈ کا استعمال کریں:

+

-conf_code-

اگر آپ نے اس کوڈ کی درخواست نہیں کی، تو آپ اس ای میل کو محفوظ طریقے سے نظرانداز کر سکتے ہیں۔

شکریہ،

{{.TeamName}} ٹیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/vi.html b/auth/email_link/translations/email/modify_email/vi.html index 568ce42d..6c96e7f4 100644 --- a/auth/email_link/translations/email/modify_email/vi.html +++ b/auth/email_link/translations/email/modify_email/vi.html @@ -3,8 +3,8 @@ -->

Chào {{.PetName}},

-

Chúng tôi đã nhận được yêu cầu đăng nhập vào {{.AppName}} bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản {{.Email}} của mình, hãy sử dụng mã xác nhận này:

-

{{.ConfirmationCode}}

+

Chúng tôi đã nhận được yêu cầu đăng nhập vào {{.AppName}} bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản -email- của mình, hãy sử dụng mã xác nhận này:

+

-conf_code-

Nếu bạn không yêu cầu mã này, bạn có thể bỏ qua email này một cách an toàn.

Cảm ơn,

Đội ngũ {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/yo.html b/auth/email_link/translations/email/modify_email/yo.html index c663668b..eda1cb9b 100644 --- a/auth/email_link/translations/email/modify_email/yo.html +++ b/auth/email_link/translations/email/modify_email/yo.html @@ -3,8 +3,8 @@ -->

Pẹlẹ o {{.PetName}},

-

A gba ibeere lati wọle si {{.AppName}} nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ {{.Email}} rẹ, lo koodu ijẹrisi yii:

-

{{.ConfirmationCode}}

+

A gba ibeere lati wọle si {{.AppName}} nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ -email- rẹ, lo koodu ijẹrisi yii:

+

-conf_code-

Ti o ko ba beere fun koodu yii, o le foju imeeli yii lailewu.

O ṣeun,

Ẹgbẹ {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/zh-cn.html b/auth/email_link/translations/email/modify_email/zh-cn.html index a34fd03d..d498b6b4 100644 --- a/auth/email_link/translations/email/modify_email/zh-cn.html +++ b/auth/email_link/translations/email/modify_email/zh-cn.html @@ -3,8 +3,8 @@ -->

你好 {{.PetName}},

-

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用{{.Email}}帐户登录,请使用此确认码:

-

{{.ConfirmationCode}}

+

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用-email-帐户登录,请使用此确认码:

+

-conf_code-

如果您没有请求此代码,可以安全地忽略此电子邮件。

谢谢,

{{.TeamName}}团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/zh.html b/auth/email_link/translations/email/modify_email/zh.html index a34fd03d..d498b6b4 100644 --- a/auth/email_link/translations/email/modify_email/zh.html +++ b/auth/email_link/translations/email/modify_email/zh.html @@ -3,8 +3,8 @@ -->

你好 {{.PetName}},

-

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用{{.Email}}帐户登录,请使用此确认码:

-

{{.ConfirmationCode}}

+

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用-email-帐户登录,请使用此确认码:

+

-conf_code-

如果您没有请求此代码,可以安全地忽略此电子邮件。

谢谢,

{{.TeamName}}团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/zu.html b/auth/email_link/translations/email/modify_email/zu.html index 6f7385aa..c4182d0e 100644 --- a/auth/email_link/translations/email/modify_email/zu.html +++ b/auth/email_link/translations/email/modify_email/zu.html @@ -3,8 +3,8 @@ -->

Sawubona {{.PetName}},

-

Sithole isicelo sokungena ku-{{.AppName}} sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho ye-{{.Email}}, sebenzisa le khodi yokuqinisekisa:

-

{{.ConfirmationCode}}

+

Sithole isicelo sokungena ku-{{.AppName}} sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho ye--email-, sebenzisa le khodi yokuqinisekisa:

+

-conf_code-

Uma ungacelanga le khodi, ungayinaki le imeyili ngokuphepha.

Siyabonga,

Iqembu le-{{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/af.html b/auth/email_link/translations/email/signin/af.html index e75abbd2..b79db91d 100644 --- a/auth/email_link/translations/email/signin/af.html +++ b/auth/email_link/translations/email/signin/af.html @@ -3,7 +3,7 @@ -->

Hallo,

-

Ons het 'n versoek ontvang om by ons toepassing aan te meld met hierdie e-posadres. As jy met jou {{.Email}}-rekening wil aanmeld, gebruik hierdie bevestigingskode:

-

{{.ConfirmationCode}}

+

Ons het 'n versoek ontvang om by ons toepassing aan te meld met hierdie e-posadres. As jy met jou -email--rekening wil aanmeld, gebruik hierdie bevestigingskode:

+

-conf_code-

As jy nie hierdie kode versoek het nie, kan jy hierdie e-pos veilig ignoreer.

Dankie,
Ice Labs-span

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/am.html b/auth/email_link/translations/email/signin/am.html index cd4744f5..c44cc6f9 100644 --- a/auth/email_link/translations/email/signin/am.html +++ b/auth/email_link/translations/email/signin/am.html @@ -3,7 +3,7 @@ -->

ሰላም,

-

በዚህ ኢሜል አድራሻ ለመግባት ጥያቄ እንቀበላለን። ከ{{.Email}} መለያ ጋር ለመግባት፣ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

-

{{.ConfirmationCode}}

+

በዚህ ኢሜል አድራሻ ለመግባት ጥያቄ እንቀበላለን። ከ-email- መለያ ጋር ለመግባት፣ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

+

-conf_code-

ይህን ኮድ ካልጠየቃችሁ፣ ይህን ኢሜል በደኅና ማግኘት ይችላሉ።

አመሰግናለሁ,
Ice Labs ቡድን

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ar.html b/auth/email_link/translations/email/signin/ar.html index 68d73660..631179cf 100644 --- a/auth/email_link/translations/email/signin/ar.html +++ b/auth/email_link/translations/email/signin/ar.html @@ -3,7 +3,7 @@ -->

مرحبًا،

-

لقد تلقينا طلبًا لتسجيل الدخول إلى تطبيقنا باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول بحسابك {{.Email}}، فاستخدم رمز التأكيد هذا:

-

{{.ConfirmationCode}}

+

لقد تلقينا طلبًا لتسجيل الدخول إلى تطبيقنا باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول بحسابك -email-، فاستخدم رمز التأكيد هذا:

+

-conf_code-

إذا لم تطلب هذا الرمز، يمكنك تجاهل هذا البريد الإلكتروني بأمان.

شكرًا،
فريق Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/az.html b/auth/email_link/translations/email/signin/az.html index d2d84f9b..12e7c85d 100644 --- a/auth/email_link/translations/email/signin/az.html +++ b/auth/email_link/translations/email/signin/az.html @@ -3,7 +3,7 @@ -->

Salam,

-

Bu e-poçt ünvanından istifadə edərək tətbiqimizə daxil olmaq üçün bir sorğu aldıq. {{.Email}} hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

-

{{.ConfirmationCode}}

+

Bu e-poçt ünvanından istifadə edərək tətbiqimizə daxil olmaq üçün bir sorğu aldıq. -email- hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

+

-conf_code-

Əgər bu kodu tələb etməmisinizsə, bu e-poçtu təhlükəsiz şəkildə gözardı edə bilərsiniz.

Təşəkkürlər,
Ice Labs komandası

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/bg.html b/auth/email_link/translations/email/signin/bg.html index 72e31baf..62441e1f 100644 --- a/auth/email_link/translations/email/signin/bg.html +++ b/auth/email_link/translations/email/signin/bg.html @@ -3,7 +3,7 @@ -->

Здравейте,

-

Получихме заявка за вход в нашето приложение, използвайки този имейл адрес. Ако искате да влезете с вашия акаунт {{.Email}}, използвайте този код за потвърждение:

-

{{.ConfirmationCode}}

+

Получихме заявка за вход в нашето приложение, използвайки този имейл адрес. Ако искате да влезете с вашия акаунт -email-, използвайте този код за потвърждение:

+

-conf_code-

Ако не сте заявявали този код, можете спокойно да игнорирате този имейл.

Благодарим ви,
Екипът на Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/bn.html b/auth/email_link/translations/email/signin/bn.html index 614e10ec..93180f69 100644 --- a/auth/email_link/translations/email/signin/bn.html +++ b/auth/email_link/translations/email/signin/bn.html @@ -3,7 +3,7 @@ -->

হাই,

-

আমরা আমাদের অ্যাপ্লিকেশনটিতে এই ইমেল ঠিকানাটি ব্যবহার করে সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার {{.Email}} অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তবে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

-

{{.ConfirmationCode}}

+

আমরা আমাদের অ্যাপ্লিকেশনটিতে এই ইমেল ঠিকানাটি ব্যবহার করে সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার -email- অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তবে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

+

-conf_code-

আপনি যদি এই কোডটি অনুরোধ না করেন, তবে আপনি নিরাপদে এই ইমেলটি উপেক্ষা করতে পারেন।

ধন্যবাদ,
Ice Labs টিম

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/cs.html b/auth/email_link/translations/email/signin/cs.html index b25dc3fa..b4be02a9 100644 --- a/auth/email_link/translations/email/signin/cs.html +++ b/auth/email_link/translations/email/signin/cs.html @@ -3,7 +3,7 @@ -->

Ahoj,

-

Obdrželi jsme žádost o přihlášení do naší aplikace pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí svého účtu {{.Email}}, použijte tento potvrzovací kód:

-

{{.ConfirmationCode}}

+

Obdrželi jsme žádost o přihlášení do naší aplikace pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí svého účtu -email-, použijte tento potvrzovací kód:

+

-conf_code-

Pokud jste o tento kód nežádali, můžete tento e-mail bezpečně ignorovat.

Děkujeme,
Tým Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/de.html b/auth/email_link/translations/email/signin/de.html index a3b18bf1..dba161b1 100644 --- a/auth/email_link/translations/email/signin/de.html +++ b/auth/email_link/translations/email/signin/de.html @@ -3,7 +3,7 @@ -->

Hallo,

-

Wir haben eine Anfrage erhalten, sich mit dieser E-Mail-Adresse bei unserer Anwendung anzumelden. Wenn Sie sich mit Ihrem {{.Email}}-Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

-

{{.ConfirmationCode}}

+

Wir haben eine Anfrage erhalten, sich mit dieser E-Mail-Adresse bei unserer Anwendung anzumelden. Wenn Sie sich mit Ihrem -email--Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

+

-conf_code-

Wenn Sie diesen Code nicht angefordert haben, können Sie diese E-Mail sicher ignorieren.

Danke,
Ihr Ice Labs Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/el.html b/auth/email_link/translations/email/signin/el.html index 3ad383f2..d5c18593 100644 --- a/auth/email_link/translations/email/signin/el.html +++ b/auth/email_link/translations/email/signin/el.html @@ -3,7 +3,7 @@ -->

Γεια σας,

-

Λάβαμε αίτημα σύνδεσης στην εφαρμογή μας χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας {{.Email}}, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

-

{{.ConfirmationCode}}

+

Λάβαμε αίτημα σύνδεσης στην εφαρμογή μας χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας -email-, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

+

-conf_code-

Αν δεν ζητήσατε αυτόν τον κωδικό, μπορείτε να αγνοήσετε με ασφάλεια αυτό το email.

Ευχαριστούμε,
Η ομάδα Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/en.html b/auth/email_link/translations/email/signin/en.html index c09a9d9b..0d0e2891 100644 --- a/auth/email_link/translations/email/signin/en.html +++ b/auth/email_link/translations/email/signin/en.html @@ -3,8 +3,8 @@ -->

Hi,

-

We received a request to sign in to our application using this email address. If you want to sign in with your {{.Email}} account, use this confirmation code:

-

{{.ConfirmationCode}}

+

We received a request to sign in to our application using this email address. If you want to sign in with your -email- account, use this confirmation code:

+

-conf_code-

If you did not request this code, you can safely ignore this email.

Thanks,
Ice Labs Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/es.html b/auth/email_link/translations/email/signin/es.html index 702389e8..f8ab8ddb 100644 --- a/auth/email_link/translations/email/signin/es.html +++ b/auth/email_link/translations/email/signin/es.html @@ -3,7 +3,7 @@ -->

Hola,

-

Hemos recibido una solicitud para iniciar sesión en nuestra aplicación utilizando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta {{.Email}}, usa este código de confirmación:

-

{{.ConfirmationCode}}

+

Hemos recibido una solicitud para iniciar sesión en nuestra aplicación utilizando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta -email-, usa este código de confirmación:

+

-conf_code-

Si no solicitaste este código, puedes ignorar este correo electrónico de forma segura.

Gracias,
Equipo de Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/fa.html b/auth/email_link/translations/email/signin/fa.html index 048ff277..0b317b20 100644 --- a/auth/email_link/translations/email/signin/fa.html +++ b/auth/email_link/translations/email/signin/fa.html @@ -3,7 +3,7 @@ -->

سلام،

-

ما یک درخواست برای ورود به برنامه‌مان با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب {{.Email}} خود وارد شوید، از این کد تأیید استفاده کنید:

-

{{.ConfirmationCode}}

+

ما یک درخواست برای ورود به برنامه‌مان با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب -email- خود وارد شوید، از این کد تأیید استفاده کنید:

+

-conf_code-

اگر این کد را درخواست نکردید، می‌توانید این ایمیل را نادیده بگیرید.

با تشکر،
تیم Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/fr.html b/auth/email_link/translations/email/signin/fr.html index 3e61fae8..3322f3a1 100644 --- a/auth/email_link/translations/email/signin/fr.html +++ b/auth/email_link/translations/email/signin/fr.html @@ -3,7 +3,7 @@ -->

Bonjour,

-

Nous avons reçu une demande de connexion à notre application en utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte {{.Email}}, utilisez ce code de confirmation:

-

{{.ConfirmationCode}}

+

Nous avons reçu une demande de connexion à notre application en utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte -email-, utilisez ce code de confirmation:

+

-conf_code-

Si vous n'avez pas demandé ce code, vous pouvez ignorer cet e-mail en toute sécurité.

Merci,
L'équipe Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/gu.html b/auth/email_link/translations/email/signin/gu.html index 75cabbf1..b6aa76ae 100644 --- a/auth/email_link/translations/email/signin/gu.html +++ b/auth/email_link/translations/email/signin/gu.html @@ -3,7 +3,7 @@ -->

હાય,

-

આ ઇમેઇલ સરનામાનો ઉપયોગ કરીને અમારું એપ્લિકેશનમાં સાઇન ઇન કરવા માટેની વિનંતી પ્રાપ્ત થઈ. જો તમે તમારી {{.Email}} ખાતા સાથે સાઇન ઇન કરવા માંગો છો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

-

{{.ConfirmationCode}}

+

આ ઇમેઇલ સરનામાનો ઉપયોગ કરીને અમારું એપ્લિકેશનમાં સાઇન ઇન કરવા માટેની વિનંતી પ્રાપ્ત થઈ. જો તમે તમારી -email- ખાતા સાથે સાઇન ઇન કરવા માંગો છો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

+

-conf_code-

જો તમે આ કોડનું વિનંતી નથી કરી, તો તમે આ ઇમેઇલને સુરક્ષિત રીતે અવગણિત કરી શકો છો.

આભાર,
Ice Labs ટીમ

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/he.html b/auth/email_link/translations/email/signin/he.html index 8e483e50..ab0ae7ec 100644 --- a/auth/email_link/translations/email/signin/he.html +++ b/auth/email_link/translations/email/signin/he.html @@ -3,7 +3,7 @@ -->

שלום,

-

קיבלנו בקשה להיכנס לאפליקציה שלנו באמצעות כתובת האימייל הזו. אם ברצונך להיכנס עם חשבון {{.Email}}, השתמש בקוד האישור הזה:

-

{{.ConfirmationCode}}

+

קיבלנו בקשה להיכנס לאפליקציה שלנו באמצעות כתובת האימייל הזו. אם ברצונך להיכנס עם חשבון -email-, השתמש בקוד האישור הזה:

+

-conf_code-

אם לא ביקשת קוד זה, תוכל להתעלם מהאימייל הזה בבטחה.

תודה,
צוות Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/hi.html b/auth/email_link/translations/email/signin/hi.html index f3e97f5e..7fd38927 100644 --- a/auth/email_link/translations/email/signin/hi.html +++ b/auth/email_link/translations/email/signin/hi.html @@ -3,7 +3,7 @@ -->

नमस्ते,

-

हमें इस ईमेल पते का उपयोग करके हमारे एप्लिकेशन में साइन इन करने के लिए एक अनुरोध प्राप्त हुआ है। यदि आप अपने {{.Email}} खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

-

{{.ConfirmationCode}}

+

हमें इस ईमेल पते का उपयोग करके हमारे एप्लिकेशन में साइन इन करने के लिए एक अनुरोध प्राप्त हुआ है। यदि आप अपने -email- खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

+

-conf_code-

यदि आपने इस कोड का अनुरोध नहीं किया है, तो आप इस ईमेल को सुरक्षित रूप से अनदेखा कर सकते हैं।

धन्यवाद,
Ice Labs टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/hu.html b/auth/email_link/translations/email/signin/hu.html index f1019051..0d0ff3aa 100644 --- a/auth/email_link/translations/email/signin/hu.html +++ b/auth/email_link/translations/email/signin/hu.html @@ -3,7 +3,7 @@ -->

Szia,

-

Kaptunk egy kérést, hogy jelentkezzen be az alkalmazásunkba ezzel az e-mail címmel. Ha a {{.Email}} fiókkal szeretne bejelentkezni, használja ezt a megerősítő kódot:

-

{{.ConfirmationCode}}

+

Kaptunk egy kérést, hogy jelentkezzen be az alkalmazásunkba ezzel az e-mail címmel. Ha a -email- fiókkal szeretne bejelentkezni, használja ezt a megerősítő kódot:

+

-conf_code-

Ha nem kérte ezt a kódot, akkor ezt az e-mailt figyelmen kívül hagyhatja.

Köszönöm,
Ice Labs csapat

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/id.html b/auth/email_link/translations/email/signin/id.html index c8cc39f4..7321eaf4 100644 --- a/auth/email_link/translations/email/signin/id.html +++ b/auth/email_link/translations/email/signin/id.html @@ -3,7 +3,7 @@ -->

Hai,

-

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika Anda ingin masuk dengan akun {{.Email}}, gunakan kode konfirmasi ini:

-

{{.ConfirmationCode}}

+

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika Anda ingin masuk dengan akun -email-, gunakan kode konfirmasi ini:

+

-conf_code-

Jika Anda tidak meminta kode ini, Anda dapat mengabaikan email ini dengan aman.

Terima kasih,
Tim Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/it.html b/auth/email_link/translations/email/signin/it.html index 4fa157e0..9af08a4b 100644 --- a/auth/email_link/translations/email/signin/it.html +++ b/auth/email_link/translations/email/signin/it.html @@ -3,7 +3,7 @@ -->

Ciao,

-

Abbiamo ricevuto una richiesta di accesso alla nostra applicazione utilizzando questo indirizzo email. Se vuoi accedere con il tuo account {{.Email}}, usa questo codice di conferma:

-

{{.ConfirmationCode}}

+

Abbiamo ricevuto una richiesta di accesso alla nostra applicazione utilizzando questo indirizzo email. Se vuoi accedere con il tuo account -email-, usa questo codice di conferma:

+

-conf_code-

Se non hai richiesto questo codice, puoi ignorare questa email in sicurezza.

Grazie,
Il team di Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ja.html b/auth/email_link/translations/email/signin/ja.html index 3ef59ca4..b0adf000 100644 --- a/auth/email_link/translations/email/signin/ja.html +++ b/auth/email_link/translations/email/signin/ja.html @@ -3,7 +3,7 @@ -->

こんにちは、

-

このメールアドレスを使用してアプリケーションにサインインするリクエストを受け取りました。 {{.Email}} アカウントでサインインする場合は、次の確認コードを使用してください:

-

{{.ConfirmationCode}}

+

このメールアドレスを使用してアプリケーションにサインインするリクエストを受け取りました。 -email- アカウントでサインインする場合は、次の確認コードを使用してください:

+

-conf_code-

このコードをリクエストしていない場合は、このメールを無視してください。

ありがとう、
Ice Labs チーム

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/jv.html b/auth/email_link/translations/email/signin/jv.html index 997d00e6..7d67cada 100644 --- a/auth/email_link/translations/email/signin/jv.html +++ b/auth/email_link/translations/email/signin/jv.html @@ -3,7 +3,7 @@ -->

Hai,

-

Kami nampi panyuwunan kanggo mlebu menyang aplikasi kita nggunakake alamat email iki. Yen sampeyan pengin mlebu nganggo akun {{.Email}}, gunakake kode konfirmasi iki:

-

{{.ConfirmationCode}}

+

Kami nampi panyuwunan kanggo mlebu menyang aplikasi kita nggunakake alamat email iki. Yen sampeyan pengin mlebu nganggo akun -email-, gunakake kode konfirmasi iki:

+

-conf_code-

Yen sampeyan ora njaluk kode iki, sampeyan bisa nglirwakake email iki kanthi aman.

Matur nuwun,
Tim Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/kn.html b/auth/email_link/translations/email/signin/kn.html index bcbd6c31..bf99da21 100644 --- a/auth/email_link/translations/email/signin/kn.html +++ b/auth/email_link/translations/email/signin/kn.html @@ -3,7 +3,7 @@ -->

ನಮಸ್ಕಾರ,

-

ನಾವು ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿಕೊಂಡು ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ {{.Email}} ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

-

{{.ConfirmationCode}}

+

ನಾವು ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿಕೊಂಡು ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ -email- ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

+

-conf_code-

ನೀವು ಈ ಕೋಡ್ ಅನ್ನು ವಿನಂತಿಸದಿದ್ದರೆ, ನೀವು ಈ ಇಮೇಲ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ನಿರ್ಲಕ್ಷಿಸಬಹುದು.

ಧನ್ಯವಾದಗಳು,
Ice Labs ತಂಡ

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ko.html b/auth/email_link/translations/email/signin/ko.html index 6d804782..478c86de 100644 --- a/auth/email_link/translations/email/signin/ko.html +++ b/auth/email_link/translations/email/signin/ko.html @@ -3,7 +3,7 @@ -->

안녕하세요,

-

이 이메일 주소를 사용하여 애플리케이션에 로그인하려는 요청을 받았습니다. {{.Email}} 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

-

{{.ConfirmationCode}}

+

이 이메일 주소를 사용하여 애플리케이션에 로그인하려는 요청을 받았습니다. -email- 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

+

-conf_code-

이 코드를 요청하지 않은 경우 이 이메일을 무시해도 됩니다.

감사합니다,
Ice Labs 팀

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/mr.html b/auth/email_link/translations/email/signin/mr.html index 836d88c5..ffe90219 100644 --- a/auth/email_link/translations/email/signin/mr.html +++ b/auth/email_link/translations/email/signin/mr.html @@ -3,7 +3,7 @@ -->

हाय,

-

आम्हाला या ईमेल पत्त्याचा वापर करून आमच्या अनुप्रयोगात साइन इन करण्यासाठी विनंती प्राप्त झाली आहे. जर तुम्हाला तुमच्या {{.Email}} खात्यासह साइन इन करायचे असेल, तर हा पुष्टीकरण कोड वापरा:

-

{{.ConfirmationCode}}

+

आम्हाला या ईमेल पत्त्याचा वापर करून आमच्या अनुप्रयोगात साइन इन करण्यासाठी विनंती प्राप्त झाली आहे. जर तुम्हाला तुमच्या -email- खात्यासह साइन इन करायचे असेल, तर हा पुष्टीकरण कोड वापरा:

+

-conf_code-

जर तुम्ही हा कोड विनंती केला नसेल, तर तुम्ही हा ईमेल सुरक्षितपणे दुर्लक्ष करू शकता.

धन्यवाद,
Ice Labs टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ms.html b/auth/email_link/translations/email/signin/ms.html index 393dc894..ce7594ee 100644 --- a/auth/email_link/translations/email/signin/ms.html +++ b/auth/email_link/translations/email/signin/ms.html @@ -3,7 +3,7 @@ -->

Hai,

-

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika anda ingin masuk dengan akaun {{.Email}}, gunakan kod pengesahan ini:

-

{{.ConfirmationCode}}

+

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika anda ingin masuk dengan akaun -email-, gunakan kod pengesahan ini:

+

-conf_code-

Jika anda tidak meminta kod ini, anda boleh mengabaikan email ini dengan selamat.

Terima kasih,
Pasukan Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/nb.html b/auth/email_link/translations/email/signin/nb.html index f9d79eb8..60707ec8 100644 --- a/auth/email_link/translations/email/signin/nb.html +++ b/auth/email_link/translations/email/signin/nb.html @@ -3,7 +3,7 @@ -->

Hei,

-

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

-

{{.ConfirmationCode}}

+

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

+

-conf_code-

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,
Ice Labs-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/nn.html b/auth/email_link/translations/email/signin/nn.html index f9d79eb8..60707ec8 100644 --- a/auth/email_link/translations/email/signin/nn.html +++ b/auth/email_link/translations/email/signin/nn.html @@ -3,7 +3,7 @@ -->

Hei,

-

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

-

{{.ConfirmationCode}}

+

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

+

-conf_code-

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,
Ice Labs-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/pa-in.html b/auth/email_link/translations/email/signin/pa-in.html index 240e714a..802b8920 100644 --- a/auth/email_link/translations/email/signin/pa-in.html +++ b/auth/email_link/translations/email/signin/pa-in.html @@ -3,7 +3,7 @@ -->

ਹੈਲੋ,

-

ਅਸੀਂ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਇਸ ਈਮੇਲ ਪਤੇ ਨੂੰ ਵਰਤ ਕੇ ਸਾਇਨ ਇਨ ਕਰਨ ਲਈ ਇੱਕ ਬੇਨਤੀ ਪ੍ਰਾਪਤ ਕੀਤੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ {{.Email}} ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦਾ ਉਪਯੋਗ ਕਰੋ:

-

{{.ConfirmationCode}}

+

ਅਸੀਂ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਇਸ ਈਮੇਲ ਪਤੇ ਨੂੰ ਵਰਤ ਕੇ ਸਾਇਨ ਇਨ ਕਰਨ ਲਈ ਇੱਕ ਬੇਨਤੀ ਪ੍ਰਾਪਤ ਕੀਤੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ -email- ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦਾ ਉਪਯੋਗ ਕਰੋ:

+

-conf_code-

ਜੇ ਤੁਸੀਂ ਇਸ ਕੋਡ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਈਮੇਲ ਨੂੰ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਅਣਦੇਖਾ ਕਰ ਸਕਦੇ ਹੋ।

ਧੰਨਵਾਦ,
Ice Labs ਟੀਮ

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/pl.html b/auth/email_link/translations/email/signin/pl.html index c8f82b7c..22727c25 100644 --- a/auth/email_link/translations/email/signin/pl.html +++ b/auth/email_link/translations/email/signin/pl.html @@ -3,7 +3,7 @@ -->

Witaj,

-

Otrzymaliśmy prośbę o zalogowanie się do naszej aplikacji przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się na swoje konto {{.Email}}, użyj tego kodu potwierdzającego:

-

{{.ConfirmationCode}}

+

Otrzymaliśmy prośbę o zalogowanie się do naszej aplikacji przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się na swoje konto -email-, użyj tego kodu potwierdzającego:

+

-conf_code-

Jeśli nie żądałeś tego kodu, możesz bezpiecznie zignorować tę wiadomość e-mail.

Dziękujemy,
Zespół Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ps.html b/auth/email_link/translations/email/signin/ps.html index 07d80f0a..1405cb2d 100644 --- a/auth/email_link/translations/email/signin/ps.html +++ b/auth/email_link/translations/email/signin/ps.html @@ -3,7 +3,7 @@ -->

سلام،

-

موږ غوښتنه ترلاسه کړه چې زموږ په غوښتنلیک کې د ننوتلو لپاره دا بریښنالیک پته وکاروئ. که تاسو غواړئ د خپل {{.Email}} حساب سره ننوتل، دا د تایید کود وکاروئ:

-

{{.ConfirmationCode}}

+

موږ غوښتنه ترلاسه کړه چې زموږ په غوښتنلیک کې د ننوتلو لپاره دا بریښنالیک پته وکاروئ. که تاسو غواړئ د خپل -email- حساب سره ننوتل، دا د تایید کود وکاروئ:

+

-conf_code-

که تاسو دا کود غوښتنه نه وي کړې، تاسو کولی شئ دا بریښنالیک په خوندي ډول له پامه غورځوئ.

مننه،
د Ice Labs ټیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/pt.html b/auth/email_link/translations/email/signin/pt.html index cee7cd95..1c4cc82a 100644 --- a/auth/email_link/translations/email/signin/pt.html +++ b/auth/email_link/translations/email/signin/pt.html @@ -3,7 +3,7 @@ -->

Olá,

-

Recebemos um pedido para entrar em nosso aplicativo usando este endereço de email. Se você deseja entrar com sua conta {{.Email}}, use este código de confirmação:

-

{{.ConfirmationCode}}

+

Recebemos um pedido para entrar em nosso aplicativo usando este endereço de email. Se você deseja entrar com sua conta -email-, use este código de confirmação:

+

-conf_code-

Se você não solicitou este código, pode ignorar este email com segurança.

Obrigado,
Equipe Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ro.html b/auth/email_link/translations/email/signin/ro.html index c34b407c..5d3ae0ab 100644 --- a/auth/email_link/translations/email/signin/ro.html +++ b/auth/email_link/translations/email/signin/ro.html @@ -3,7 +3,7 @@ -->

Bună,

-

Am primit o cerere de conectare la aplicația noastră folosind această adresă de email. Dacă doriți să vă conectați cu contul {{.Email}}, utilizați acest cod de confirmare:

-

{{.ConfirmationCode}}

+

Am primit o cerere de conectare la aplicația noastră folosind această adresă de email. Dacă doriți să vă conectați cu contul -email-, utilizați acest cod de confirmare:

+

-conf_code-

Dacă nu ați solicitat acest cod, puteți ignora în siguranță acest email.

Mulțumim,
Echipa Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ru.html b/auth/email_link/translations/email/signin/ru.html index 147ee387..e73762c7 100644 --- a/auth/email_link/translations/email/signin/ru.html +++ b/auth/email_link/translations/email/signin/ru.html @@ -3,7 +3,7 @@ -->

Привет,

-

Мы получили запрос на вход в наше приложение, используя этот адрес электронной почты. Если вы хотите войти с помощью своей учетной записи {{.Email}}, используйте этот код подтверждения:

-

{{.ConfirmationCode}}

+

Мы получили запрос на вход в наше приложение, используя этот адрес электронной почты. Если вы хотите войти с помощью своей учетной записи -email-, используйте этот код подтверждения:

+

-conf_code-

Если вы не запрашивали этот код, вы можете безопасно проигнорировать это письмо.

Спасибо,
Команда Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sd.html b/auth/email_link/translations/email/signin/sd.html index 355820c9..f77842fa 100644 --- a/auth/email_link/translations/email/signin/sd.html +++ b/auth/email_link/translations/email/signin/sd.html @@ -3,7 +3,7 @@ -->

هيلو،

-

اسان کي هن اي ميل پتي کي استعمال ڪندي اسان جي درخواست تي سائن ان ڪرڻ جي درخواست ملي. جيڪڏھن توھان پنھنجي {{.Email}} کاتي سان سائن ان ڪرڻ چاھيو ٿا، ته ھن تصديق ڪوڊ کي استعمال ڪريو:

-

{{.ConfirmationCode}}

+

اسان کي هن اي ميل پتي کي استعمال ڪندي اسان جي درخواست تي سائن ان ڪرڻ جي درخواست ملي. جيڪڏھن توھان پنھنجي -email- کاتي سان سائن ان ڪرڻ چاھيو ٿا، ته ھن تصديق ڪوڊ کي استعمال ڪريو:

+

-conf_code-

جيڪڏهن توهان هن ڪوڊ کي درخواست نه ڪئي آهي، توهان هن اي ميل کي محفوظ طور تي نظرانداز ڪري سگهو ٿا.

مهرباني،
Ice Labs ٽيم

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sk.html b/auth/email_link/translations/email/signin/sk.html index c2ad2951..f48c40df 100644 --- a/auth/email_link/translations/email/signin/sk.html +++ b/auth/email_link/translations/email/signin/sk.html @@ -3,7 +3,7 @@ -->

Ahoj,

-

Obdržali sme žiadosť o prihlásenie do našej aplikácie pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou svojho účtu {{.Email}}, použite tento potvrdzovací kód:

-

{{.ConfirmationCode}}

+

Obdržali sme žiadosť o prihlásenie do našej aplikácie pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou svojho účtu -email-, použite tento potvrdzovací kód:

+

-conf_code-

Ak ste tento kód nežiadali, môžete tento e-mail bezpečne ignorovať.

Ďakujeme,
Tím Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sl.html b/auth/email_link/translations/email/signin/sl.html index f50112bb..0e4f2089 100644 --- a/auth/email_link/translations/email/signin/sl.html +++ b/auth/email_link/translations/email/signin/sl.html @@ -3,7 +3,7 @@ -->

Zdravo,

-

Prejeli smo zahtevo za prijavo v našo aplikacijo s tem e-poštnim naslovom. Če želite prijaviti z vašim računom {{.Email}}, uporabite to potrditveno kodo:

-

{{.ConfirmationCode}}

+

Prejeli smo zahtevo za prijavo v našo aplikacijo s tem e-poštnim naslovom. Če želite prijaviti z vašim računom -email-, uporabite to potrditveno kodo:

+

-conf_code-

Če te kode niste zahtevali, lahko to e-pošto varno prezrete.

Hvala,
Ekipa Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sq.html b/auth/email_link/translations/email/signin/sq.html index 42fb8cf7..7a7567fe 100644 --- a/auth/email_link/translations/email/signin/sq.html +++ b/auth/email_link/translations/email/signin/sq.html @@ -3,7 +3,7 @@ -->

Përshëndetje,

-

Ne morëm një kërkesë për të hyrë në aplikacionin tonë duke përdorur këtë adresë emaili. Nëse dëshironi të hyni me llogarinë tuaj {{.Email}}, përdorni këtë kod konfirmimi:

-

{{.ConfirmationCode}}

+

Ne morëm një kërkesë për të hyrë në aplikacionin tonë duke përdorur këtë adresë emaili. Nëse dëshironi të hyni me llogarinë tuaj -email-, përdorni këtë kod konfirmimi:

+

-conf_code-

Nëse nuk e keni kërkuar këtë kod, mund ta injoroni këtë email në mënyrë të sigurt.

Faleminderit,
Ekipi Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/su.html b/auth/email_link/translations/email/signin/su.html index 8868d7fe..cacc50ec 100644 --- a/auth/email_link/translations/email/signin/su.html +++ b/auth/email_link/translations/email/signin/su.html @@ -3,7 +3,7 @@ -->

Hai,

-

Urang nampi paménta pikeun asup kana aplikasi kami nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun {{.Email}}, anggo kode konfirmasi ieu:

-

{{.ConfirmationCode}}

+

Urang nampi paménta pikeun asup kana aplikasi kami nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun -email-, anggo kode konfirmasi ieu:

+

-conf_code-

Upami anjeun henteu nyungkeun kode ieu, anjeun tiasa ngahémat email ieu kalayan aman.

Hatur nuhun,
Tim Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sv.html b/auth/email_link/translations/email/signin/sv.html index bb34718c..b5ddf0bd 100644 --- a/auth/email_link/translations/email/signin/sv.html +++ b/auth/email_link/translations/email/signin/sv.html @@ -3,7 +3,7 @@ -->

Hej,

-

Vi har mottagit en begäran om att logga in på vår applikation med denna e-postadress. Om du vill logga in med ditt {{.Email}}-konto, använd denna bekräftelsekod:

-

{{.ConfirmationCode}}

+

Vi har mottagit en begäran om att logga in på vår applikation med denna e-postadress. Om du vill logga in med ditt -email--konto, använd denna bekräftelsekod:

+

-conf_code-

Om du inte har begärt denna kod kan du säkert ignorera detta e-postmeddelande.

Tack,
Ice Labs-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ta.html b/auth/email_link/translations/email/signin/ta.html index bd7d4067..fd4427e4 100644 --- a/auth/email_link/translations/email/signin/ta.html +++ b/auth/email_link/translations/email/signin/ta.html @@ -3,7 +3,7 @@ -->

வணக்கம்,

-

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி எங்கள் பயன்பாட்டில் உள்நுழையக் கோரிக்கை கிடைத்தது. நீங்கள் உங்கள் {{.Email}} கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்படுத்தல் குறியீட்டை பயன்படுத்தவும்:

-

{{.ConfirmationCode}}

+

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி எங்கள் பயன்பாட்டில் உள்நுழையக் கோரிக்கை கிடைத்தது. நீங்கள் உங்கள் -email- கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்படுத்தல் குறியீட்டை பயன்படுத்தவும்:

+

-conf_code-

நீங்கள் இந்தக் குறியீட்டை கோரவில்லை என்றால், இந்த மின்னஞ்சலைப் பாதுகாப்பாக புறக்கணிக்கலாம்.

நன்றி,
Ice Labs குழு

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/te.html b/auth/email_link/translations/email/signin/te.html index fc5ff73d..3936e260 100644 --- a/auth/email_link/translations/email/signin/te.html +++ b/auth/email_link/translations/email/signin/te.html @@ -3,7 +3,7 @@ -->

హలో,

-

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి మా అప్లికేషన్‌లో సైన్ ఇన్ చేయడానికి మాకు ఒక అభ్యర్థన వచ్చింది. మీరు మీ {{.Email}} ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ని ఉపయోగించండి:

-

{{.ConfirmationCode}}

+

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి మా అప్లికేషన్‌లో సైన్ ఇన్ చేయడానికి మాకు ఒక అభ్యర్థన వచ్చింది. మీరు మీ -email- ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ని ఉపయోగించండి:

+

-conf_code-

మీరు ఈ కోడ్‌ను అభ్యర్థించకపోతే, మీరు ఈ ఇమెయిల్‌ను సురక్షితంగా నిర్లక్ష్యం చేయవచ్చు.

ధన్యవాదాలు,
Ice Labs బృందం

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/th.html b/auth/email_link/translations/email/signin/th.html index eadc7f11..1d8683ee 100644 --- a/auth/email_link/translations/email/signin/th.html +++ b/auth/email_link/translations/email/signin/th.html @@ -3,7 +3,7 @@ -->

สวัสดี,

-

เราได้รับคำขอลงชื่อเข้าใช้แอปพลิเคชันของเราด้วยที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี {{.Email}} ของคุณ ให้ใช้รหัสยืนยันนี้:

-

{{.ConfirmationCode}}

+

เราได้รับคำขอลงชื่อเข้าใช้แอปพลิเคชันของเราด้วยที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี -email- ของคุณ ให้ใช้รหัสยืนยันนี้:

+

-conf_code-

หากคุณไม่ได้ร้องขอรหัสนี้ คุณสามารถเพิกเฉยต่ออีเมลนี้ได้อย่างปลอดภัย

ขอบคุณ,
ทีม Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/tl-ph.html b/auth/email_link/translations/email/signin/tl-ph.html index 3ecbae64..1c2eafe5 100644 --- a/auth/email_link/translations/email/signin/tl-ph.html +++ b/auth/email_link/translations/email/signin/tl-ph.html @@ -3,7 +3,7 @@ -->

Kumusta,

-

Nakatanggap kami ng kahilingan upang mag-sign in sa aming application gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong {{.Email}} account, gamitin ang kumpirmasyon code na ito:

-

{{.ConfirmationCode}}

+

Nakatanggap kami ng kahilingan upang mag-sign in sa aming application gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong -email- account, gamitin ang kumpirmasyon code na ito:

+

-conf_code-

Kung hindi mo hiningi ang code na ito, maaari mong balewalain nang ligtas ang email na ito.

Salamat,
Ice Labs Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/tr.html b/auth/email_link/translations/email/signin/tr.html index 88097085..b63eade4 100644 --- a/auth/email_link/translations/email/signin/tr.html +++ b/auth/email_link/translations/email/signin/tr.html @@ -3,7 +3,7 @@ -->

Merhaba,

-

Bu e-posta adresini kullanarak uygulamamıza giriş yapmak için bir istek aldık. {{.Email}} hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

-

{{.ConfirmationCode}}

+

Bu e-posta adresini kullanarak uygulamamıza giriş yapmak için bir istek aldık. -email- hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

+

-conf_code-

Bu kodu talep etmediyseniz, bu e-postayı görmezden gelebilirsiniz.

Teşekkürler,
Ice Labs Ekibi

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/uk.html b/auth/email_link/translations/email/signin/uk.html index 3658cd23..c921d68d 100644 --- a/auth/email_link/translations/email/signin/uk.html +++ b/auth/email_link/translations/email/signin/uk.html @@ -3,7 +3,7 @@ -->

Привіт,

-

Ми отримали запит на вхід до нашої програми за цією адресою електронної пошти. Якщо ви хочете ввійти з вашим обліковим записом {{.Email}}, використовуйте цей код підтвердження:

-

{{.ConfirmationCode}}

+

Ми отримали запит на вхід до нашої програми за цією адресою електронної пошти. Якщо ви хочете ввійти з вашим обліковим записом -email-, використовуйте цей код підтвердження:

+

-conf_code-

Якщо ви не запитували цей код, ви можете безпечно проігнорувати цей електронний лист.

Дякуємо,
Команда Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ur.html b/auth/email_link/translations/email/signin/ur.html index c454ec85..d8ac10e8 100644 --- a/auth/email_link/translations/email/signin/ur.html +++ b/auth/email_link/translations/email/signin/ur.html @@ -3,7 +3,7 @@ -->

ہیلو،

-

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے اپنے ایپلیکیشن میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے {{.Email}} اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو اس تصدیقی کوڈ کا استعمال کریں:

-

{{.ConfirmationCode}}

+

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے اپنے ایپلیکیشن میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے -email- اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو اس تصدیقی کوڈ کا استعمال کریں:

+

-conf_code-

اگر آپ نے اس کوڈ کی درخواست نہیں کی ہے، تو آپ اس ای میل کو محفوظ طریقے سے نظر انداز کر سکتے ہیں۔

شکریہ،
Ice Labs ٹیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/vi.html b/auth/email_link/translations/email/signin/vi.html index 3e29e721..58191431 100644 --- a/auth/email_link/translations/email/signin/vi.html +++ b/auth/email_link/translations/email/signin/vi.html @@ -3,7 +3,7 @@ -->

Chào,

-

Chúng tôi đã nhận được yêu cầu đăng nhập vào ứng dụng của chúng tôi bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản {{.Email}}, hãy sử dụng mã xác nhận này:

-

{{.ConfirmationCode}}

+

Chúng tôi đã nhận được yêu cầu đăng nhập vào ứng dụng của chúng tôi bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản -email-, hãy sử dụng mã xác nhận này:

+

-conf_code-

Nếu bạn không yêu cầu mã này, bạn có thể bỏ qua email này một cách an toàn.

Cảm ơn,
Đội ngũ Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/yo.html b/auth/email_link/translations/email/signin/yo.html index 57324074..8d424f55 100644 --- a/auth/email_link/translations/email/signin/yo.html +++ b/auth/email_link/translations/email/signin/yo.html @@ -3,7 +3,7 @@ -->

Pẹlẹ o,

-

A gba ibeere kan lati wọle si ohun elo wa nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ {{.Email}} rẹ, lo koodu ìfàṣẹsí yi:

-

{{.ConfirmationCode}}

+

A gba ibeere kan lati wọle si ohun elo wa nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ -email- rẹ, lo koodu ìfàṣẹsí yi:

+

-conf_code-

Ti o ko ba beere fun koodu yi, o le foju imeeli yi lai si ewu kankan.

O ṣeun,
Ẹgbẹ Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/zh-cn.html b/auth/email_link/translations/email/signin/zh-cn.html index f956ac8d..b953f9d9 100644 --- a/auth/email_link/translations/email/signin/zh-cn.html +++ b/auth/email_link/translations/email/signin/zh-cn.html @@ -3,7 +3,7 @@ -->

你好,

-

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 {{.Email}} 帐户登录,请使用此确认码:

-

{{.ConfirmationCode}}

+

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 -email- 帐户登录,请使用此确认码:

+

-conf_code-

如果您没有请求此代码,可以放心忽略此电子邮件。

谢谢,
Ice Labs团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/zh.html b/auth/email_link/translations/email/signin/zh.html index f956ac8d..b953f9d9 100644 --- a/auth/email_link/translations/email/signin/zh.html +++ b/auth/email_link/translations/email/signin/zh.html @@ -3,7 +3,7 @@ -->

你好,

-

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 {{.Email}} 帐户登录,请使用此确认码:

-

{{.ConfirmationCode}}

+

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 -email- 帐户登录,请使用此确认码:

+

-conf_code-

如果您没有请求此代码,可以放心忽略此电子邮件。

谢谢,
Ice Labs团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/zu.html b/auth/email_link/translations/email/signin/zu.html index b33f377e..b06c168c 100644 --- a/auth/email_link/translations/email/signin/zu.html +++ b/auth/email_link/translations/email/signin/zu.html @@ -3,7 +3,7 @@ -->

Sawubona,

-

Sithole isicelo sokungena kuhlelo lwethu sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho {{.Email}}, sebenzisa le khodi yokuqinisekisa:

-

{{.ConfirmationCode}}

+

Sithole isicelo sokungena kuhlelo lwethu sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho -email-, sebenzisa le khodi yokuqinisekisa:

+

-conf_code-

Uma ungacelanga le khodi, ungayicabangela le imeyili ngaphandle kokukhathazeka.

Siyabonga,
Iqembu le-Ice Labs

\ No newline at end of file diff --git a/auth/email_link/users.go b/auth/email_link/users.go index 4ace4dc4..c9b1253f 100644 --- a/auth/email_link/users.go +++ b/auth/email_link/users.go @@ -113,7 +113,7 @@ func (c *client) getUserByIDOrPk(ctx context.Context, userID string, id *loginID phone_number_to_email_migration_user_id, email, $3 AS device_unique_id, - 'en' AS language, + language, COALESCE((account_metadata.metadata -> 'hash_code')::BIGINT,0) AS hash_code, account_metadata.metadata, 2 AS idx diff --git a/cmd/eskimo-hut/auth.go b/cmd/eskimo-hut/auth.go index b2e61bfe..28a29491 100644 --- a/cmd/eskimo-hut/auth.go +++ b/cmd/eskimo-hut/auth.go @@ -61,7 +61,8 @@ func (s *service) SendSignInLinkToEmail( //nolint:gocritic,funlen // . return nil, server.BadRequest(err, invalidEmail) } ctx = emaillink.ContextWithPhoneNumberToEmailMigration(ctx, req.Data.UserID) //nolint:revive // Not a problem. - loginSession, err := s.authEmailLinkClient.SendSignInLinkToEmail(ctx, email, req.Data.DeviceUniqueID, req.Data.Language, req.ClientIP.String()) + posInQueue, rateLimit, loginSession, err := s.authEmailLinkClient.SendSignInLinkToEmail(ctx, email, req.Data.DeviceUniqueID, + req.Data.Language, req.ClientIP.String()) if err != nil { switch { case errors.Is(err, emaillink.ErrUserBlocked): @@ -81,7 +82,7 @@ func (s *service) SendSignInLinkToEmail( //nolint:gocritic,funlen // . } } - return server.OK[Auth](&Auth{LoginSession: loginSession}), nil + return server.OK[Auth](&Auth{LoginSession: loginSession, PositionInQueue: posInQueue, RateLimit: rateLimit}), nil } // SignIn godoc diff --git a/cmd/eskimo-hut/contract.go b/cmd/eskimo-hut/contract.go index aa21ff9c..72581d92 100644 --- a/cmd/eskimo-hut/contract.go +++ b/cmd/eskimo-hut/contract.go @@ -138,7 +138,9 @@ type ( KycFaceAvailable bool `json:"kycFaceAvailable,omitempty" example:"true"` } Auth struct { - LoginSession string `json:"loginSession" example:"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE2ODQzMjQ0NTYsImV4cCI6MTcxNTg2MDQ1NiwiYXVkIjoiIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIm90cCI6IjUxMzRhMzdkLWIyMWEtNGVhNi1hNzk2LTAxOGIwMjMwMmFhMCJ9.q3xa8Gwg2FVCRHLZqkSedH3aK8XBqykaIy85rRU40nM"` //nolint:lll // . + RateLimit string `json:"rateLimit" example:"1000:24h"` + LoginSession string `json:"loginSession" example:"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE2ODQzMjQ0NTYsImV4cCI6MTcxNTg2MDQ1NiwiYXVkIjoiIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIm90cCI6IjUxMzRhMzdkLWIyMWEtNGVhNi1hNzk2LTAxOGIwMjMwMmFhMCJ9.q3xa8Gwg2FVCRHLZqkSedH3aK8XBqykaIy85rRU40nM"` //nolint:lll // . + PositionInQueue int64 `json:"positionInQueue" example:"675"` } RefreshedToken struct { *emaillink.Tokens diff --git a/cmd/eskimo-hut/eskimo_hut.go b/cmd/eskimo-hut/eskimo_hut.go index f13ff88b..5f532dce 100644 --- a/cmd/eskimo-hut/eskimo_hut.go +++ b/cmd/eskimo-hut/eskimo_hut.go @@ -65,7 +65,7 @@ func (s *service) Close(ctx context.Context) error { return multierror.Append( //nolint:wrapcheck // Not needed. errors.Wrap(s.quizRepository.Close(), "could not close quiz repository"), errors.Wrap(s.socialRepository.Close(), "could not close socialRepository"), - errors.Wrap(s.authEmailLinkClient.Close(), "could not close authEmailLinkClient"), + errors.Wrap(s.authEmailLinkClient.Close(ctx), "could not close authEmailLinkClient"), errors.Wrap(s.usersProcessor.Close(), "could not close usersProcessor"), errors.Wrap(s.faceKycClient.Close(), "could not close faceKycClient"), ).ErrorOrNil() @@ -74,5 +74,8 @@ func (s *service) Close(ctx context.Context) error { func (s *service) CheckHealth(ctx context.Context) error { log.Debug("checking health...", "package", "users") - return errors.Wrapf(s.usersProcessor.CheckHealth(ctx), "processor health check failed") + return multierror.Append( //nolint:wrapcheck // Not needed. + errors.Wrapf(s.usersProcessor.CheckHealth(ctx), "processor health check failed"), + errors.Wrapf(s.authEmailLinkClient.CheckHealth(ctx), "email client health check failed"), + ).ErrorOrNil() } diff --git a/cmd/eskimo-hut/users.go b/cmd/eskimo-hut/users.go index f243c3f1..b992c4c8 100644 --- a/cmd/eskimo-hut/users.go +++ b/cmd/eskimo-hut/users.go @@ -231,7 +231,7 @@ func (s *service) emailUpdateRequested( language = oldUser.Language } - if loginSession, err = s.authEmailLinkClient.SendSignInLinkToEmail( + if _, _, loginSession, err = s.authEmailLinkClient.SendSignInLinkToEmail( users.ConfirmedEmailContext(ctx, loggedInUser.Email), newEmail, deviceID, language, "", ); err != nil { diff --git a/cmd/eskimo/eskimo.go b/cmd/eskimo/eskimo.go index 1ab4de94..f98edff5 100644 --- a/cmd/eskimo/eskimo.go +++ b/cmd/eskimo/eskimo.go @@ -51,7 +51,7 @@ func (s *service) Close(ctx context.Context) error { } return multierror.Append( //nolint:wrapcheck //. - errors.Wrapf(s.iceClient.Close(), "could not close iceClient"), + errors.Wrapf(s.iceClient.Close(ctx), "could not close iceClient"), errors.Wrapf(s.usersRepository.Close(), "could not close repository"), ).ErrorOrNil() } diff --git a/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go b/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go index 9c021905..357ae15f 100644 --- a/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go +++ b/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go @@ -51,7 +51,7 @@ func main() { db := storage.MustConnect(context.Background(), ddl, applicationYamlEskimoKey) defer db.Close() defer usersProcessor.Close() - defer authEmailLinkClient.Close() + defer authEmailLinkClient.Close(context.Background()) offset := uint64(0) concurrencyGuard := make(chan struct{}, concurrencyCount) diff --git a/go.mod b/go.mod index 049d63da..34b5a8da 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/prometheus/common v0.55.0 github.com/prometheus/prometheus v0.53.0 + github.com/redis/go-redis/v9 v9.5.3 github.com/stretchr/testify v1.9.0 github.com/swaggo/swag v1.16.3 github.com/testcontainers/testcontainers-go v0.31.0 @@ -55,6 +56,7 @@ require ( github.com/containerd/errdefs v0.1.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dennwc/varint v1.0.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker v27.0.3+incompatible // indirect diff --git a/go.sum b/go.sum index 710baf7e..18d51a79 100644 --- a/go.sum +++ b/go.sum @@ -13,8 +13,8 @@ cloud.google.com/go/iam v1.1.10 h1:ZSAr64oEhQSClwBL670MsJAW5/RLiC6kfw3Bqmd5ZDI= cloud.google.com/go/iam v1.1.10/go.mod h1:iEgMq62sg8zx446GCaijmA2Miwg5o3UbO+nI47WHJps= cloud.google.com/go/longrunning v0.5.9 h1:haH9pAuXdPAMqHvzX0zlWQigXT7B0+CL4/2nXXdBo5k= cloud.google.com/go/longrunning v0.5.9/go.mod h1:HD+0l9/OOW0za6UWdKJtXoFAX/BGg/3Wj8p10NeWF7c= -cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= -cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= +cloud.google.com/go/storage v1.42.0 h1:4QtGpplCVt1wz6g5o1ifXd656P5z+yNgzdw1tVfp0cU= +cloud.google.com/go/storage v1.42.0/go.mod h1:HjMXRFq65pGKFn6hxj6x3HCyR41uSB72Z0SO/Vn6JFQ= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= firebase.google.com/go/v4 v4.14.1 h1:4qiUETaFRWoFGE1XP5VbcEdtPX93Qs+8B/7KvP2825g= @@ -52,6 +52,10 @@ github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/bytedance/sonic v1.11.9 h1:LFHENlIY/SLzDWverzdOvgMztTxcfcF+cqNsz9pK5zg= github.com/bytedance/sonic v1.11.9/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= @@ -218,8 +222,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/ice-blockchain/go-tarantool-client v0.0.0-20230327200757-4fc71fa3f7bb h1:8TnFP3mc7O+tc44kv2e0/TpZKnEVUaKH+UstwfBwRkk= github.com/ice-blockchain/go-tarantool-client v0.0.0-20230327200757-4fc71fa3f7bb/go.mod h1:ZsQU7i3mxhgBBu43Oev7WPFbIjP4TniN/b1UPNGbrq8= -github.com/ice-blockchain/wintr v1.144.0 h1:YQE0olkPdSI6AOlw7r/j5jGI6uLciZQrvXFIkN4C4l4= -github.com/ice-blockchain/wintr v1.144.0/go.mod h1:3HAl5nodsetqQN30q3gUvsxgfq2B7F86Os/II7/5GPQ= +github.com/ice-blockchain/wintr v1.143.0 h1:KID/M01KN1jl7mlDF+VnIBScR7uT277mJtebYtemSF0= +github.com/ice-blockchain/wintr v1.143.0/go.mod h1:EBMC4stY8PL8ptIuoLwbh92LblNlOPNz/Ze+PlmsyyI= github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA= github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= github.com/ip2location/ip2location-go/v9 v9.7.0 h1:ipwl67HOWcrw+6GOChkEXcreRQR37NabqBd2ayYa4Q0= @@ -330,8 +334,10 @@ github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjCA= github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= -github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= -github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= +github.com/redis/go-redis/v9 v9.5.3 h1:fOAp1/uJG+ZtcITgZOfYFmTKPE7n4Vclj1wZFgRciUU= +github.com/redis/go-redis/v9 v9.5.3/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= +github.com/refraction-networking/utls v1.6.6 h1:igFsYBUJPYM8Rno9xUuDoM5GQrVEqY4llzEXOkL43Ig= +github.com/refraction-networking/utls v1.6.6/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= @@ -403,10 +409,10 @@ github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= @@ -430,8 +436,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= @@ -442,8 +448,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -458,8 +464,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -487,8 +493,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -519,6 +525,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.187.0 h1:Mxs7VATVC2v7CY+7Xwm4ndkX71hpElcvx0D1Ji/p1eo= google.golang.org/api v0.187.0/go.mod h1:KIHlTc4x7N7gKKuVsdmfBXN13yEEWXWFURWY6SBp2gk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= From 44712deb3aaeaa7efbdc984209a9da7e57b17d49 Mon Sep 17 00:00:00 2001 From: ice-cronus <105345303+ice-cronus@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:55:10 +0300 Subject: [PATCH 2/5] fix comments, graceful routine shutdown --- application.yaml | 2 - auth/email_link/contract.go | 27 ++-- auth/email_link/emaillink.go | 53 ++------ auth/email_link/link_start_auth.go | 18 ++- auth/email_link/queue.go | 122 +++++++++++------- .../translations/email/modify_email/af.html | 4 +- .../translations/email/modify_email/am.html | 4 +- .../translations/email/modify_email/ar.html | 4 +- .../translations/email/modify_email/az.html | 4 +- .../translations/email/modify_email/bg.html | 4 +- .../translations/email/modify_email/bn.html | 4 +- .../translations/email/modify_email/cs.html | 4 +- .../translations/email/modify_email/de.html | 4 +- .../translations/email/modify_email/el.html | 4 +- .../translations/email/modify_email/en.html | 4 +- .../translations/email/modify_email/es.html | 4 +- .../translations/email/modify_email/fa.html | 4 +- .../translations/email/modify_email/fr.html | 4 +- .../translations/email/modify_email/gu.html | 4 +- .../translations/email/modify_email/he.html | 4 +- .../translations/email/modify_email/hi.html | 4 +- .../translations/email/modify_email/hu.html | 4 +- .../translations/email/modify_email/id.html | 4 +- .../translations/email/modify_email/it.html | 4 +- .../translations/email/modify_email/ja.html | 4 +- .../translations/email/modify_email/jv.html | 4 +- .../translations/email/modify_email/kn.html | 4 +- .../translations/email/modify_email/ko.html | 4 +- .../translations/email/modify_email/mr.html | 4 +- .../translations/email/modify_email/ms.html | 4 +- .../translations/email/modify_email/nb.html | 4 +- .../translations/email/modify_email/nn.html | 4 +- .../email/modify_email/pa-in.html | 4 +- .../translations/email/modify_email/pl.html | 4 +- .../translations/email/modify_email/ps.html | 4 +- .../translations/email/modify_email/pt.html | 4 +- .../translations/email/modify_email/ro.html | 4 +- .../translations/email/modify_email/ru.html | 4 +- .../translations/email/modify_email/sd.html | 4 +- .../translations/email/modify_email/sk.html | 4 +- .../translations/email/modify_email/sl.html | 4 +- .../translations/email/modify_email/sq.html | 4 +- .../translations/email/modify_email/su.html | 4 +- .../translations/email/modify_email/sv.html | 4 +- .../translations/email/modify_email/ta.html | 4 +- .../translations/email/modify_email/te.html | 4 +- .../translations/email/modify_email/th.html | 4 +- .../email/modify_email/tl-ph.html | 4 +- .../translations/email/modify_email/tr.html | 4 +- .../translations/email/modify_email/uk.html | 4 +- .../translations/email/modify_email/ur.html | 4 +- .../translations/email/modify_email/vi.html | 4 +- .../translations/email/modify_email/yo.html | 4 +- .../email/modify_email/zh-cn.html | 4 +- .../translations/email/modify_email/zh.html | 4 +- .../translations/email/modify_email/zu.html | 4 +- .../translations/email/signin/af.html | 4 +- .../translations/email/signin/am.html | 4 +- .../translations/email/signin/ar.html | 4 +- .../translations/email/signin/az.html | 4 +- .../translations/email/signin/bg.html | 4 +- .../translations/email/signin/bn.html | 4 +- .../translations/email/signin/cs.html | 4 +- .../translations/email/signin/de.html | 4 +- .../translations/email/signin/el.html | 4 +- .../translations/email/signin/en.html | 4 +- .../translations/email/signin/es.html | 4 +- .../translations/email/signin/fa.html | 4 +- .../translations/email/signin/fr.html | 4 +- .../translations/email/signin/gu.html | 4 +- .../translations/email/signin/he.html | 4 +- .../translations/email/signin/hi.html | 4 +- .../translations/email/signin/hu.html | 4 +- .../translations/email/signin/id.html | 4 +- .../translations/email/signin/it.html | 4 +- .../translations/email/signin/ja.html | 4 +- .../translations/email/signin/jv.html | 4 +- .../translations/email/signin/kn.html | 4 +- .../translations/email/signin/ko.html | 4 +- .../translations/email/signin/mr.html | 4 +- .../translations/email/signin/ms.html | 4 +- .../translations/email/signin/nb.html | 4 +- .../translations/email/signin/nn.html | 4 +- .../translations/email/signin/pa-in.html | 4 +- .../translations/email/signin/pl.html | 4 +- .../translations/email/signin/ps.html | 4 +- .../translations/email/signin/pt.html | 4 +- .../translations/email/signin/ro.html | 4 +- .../translations/email/signin/ru.html | 4 +- .../translations/email/signin/sd.html | 4 +- .../translations/email/signin/sk.html | 4 +- .../translations/email/signin/sl.html | 4 +- .../translations/email/signin/sq.html | 4 +- .../translations/email/signin/su.html | 4 +- .../translations/email/signin/sv.html | 4 +- .../translations/email/signin/ta.html | 4 +- .../translations/email/signin/te.html | 4 +- .../translations/email/signin/th.html | 4 +- .../translations/email/signin/tl-ph.html | 4 +- .../translations/email/signin/tr.html | 4 +- .../translations/email/signin/uk.html | 4 +- .../translations/email/signin/ur.html | 4 +- .../translations/email/signin/vi.html | 4 +- .../translations/email/signin/yo.html | 4 +- .../translations/email/signin/zh-cn.html | 4 +- .../translations/email/signin/zh.html | 4 +- .../translations/email/signin/zu.html | 4 +- cmd/eskimo-hut/eskimo_hut.go | 5 +- cmd/eskimo/eskimo.go | 2 +- ...rebase_phone_login_with_ice_email_login.go | 4 +- go.mod | 4 +- go.sum | 46 ++++--- 112 files changed, 349 insertions(+), 342 deletions(-) diff --git a/application.yaml b/application.yaml index 69810cd0..56b5d560 100644 --- a/application.yaml +++ b/application.yaml @@ -87,8 +87,6 @@ auth/email-link: wintr/connectors/storage/v2: *db wintr/connectors/storage/v3: url: redis://default:@localhost:6379/ - emailSendBatchSize: 2 - initEmailRateLimit: "2:1m" fromEmailAddress: no-reply@ice.io fromEmailName: ice emailValidation: diff --git a/auth/email_link/contract.go b/auth/email_link/contract.go index 86cce467..318b8cbb 100644 --- a/auth/email_link/contract.go +++ b/auth/email_link/contract.go @@ -5,6 +5,7 @@ package emaillinkiceauth import ( "context" "embed" + "io" "mime/multipart" "text/template" stdlibtime "time" @@ -28,7 +29,6 @@ type ( } Client interface { IceUserIDClient - Close(ctx context.Context) error SendSignInLinkToEmail(ctx context.Context, emailValue, deviceUniqueID, language, clientIP string) (queuePos int64, rateLimit, loginSession string, err error) SignIn(ctx context.Context, loginFlowToken, confirmationCode string) (tokens *Tokens, emailConfirmed bool, err error) RegenerateTokens(ctx context.Context, prevToken string) (tokens *Tokens, err error) @@ -36,7 +36,7 @@ type ( CheckHealth(ctx context.Context) error } IceUserIDClient interface { - Close(ctx context.Context) error + io.Closer IceUserID(ctx context.Context, mail string) (iceID string, err error) Metadata(ctx context.Context, userID, emailAddress string) (metadata string, metadataFields *users.JSON, err error) } @@ -90,16 +90,17 @@ const ( duplicatedSignInRequestsInLessThan = 2 * stdlibtime.Second loginQueueKey = "login_queue" loginRateLimitKey = "login_rate_limit" + initEmailRateLimit = "1000:1m" ) type ( languageCode = string client struct { db *storage.DB - emailQueueLock storage.Lock queueDB storagev3.DB cfg *config - shutdown func(ctx context.Context) error + shutdown func() error + cancel context.CancelFunc authClient auth.Client userModifier UserModifier emailClients []email.Client @@ -107,13 +108,12 @@ type ( emailClientLBIndex uint64 } config struct { - FromEmailName string `yaml:"fromEmailName"` - FromEmailAddress string `yaml:"fromEmailAddress"` - PetName string `yaml:"petName"` - AppName string `yaml:"appName"` - TeamName string `yaml:"teamName"` - InitEmailRateLimit string `yaml:"initEmailRateLimit"` - LoginSession struct { + FromEmailName string `yaml:"fromEmailName"` + FromEmailAddress string `yaml:"fromEmailAddress"` + PetName string `yaml:"petName"` + AppName string `yaml:"appName"` + TeamName string `yaml:"teamName"` + LoginSession struct { JwtSecret string `yaml:"jwtSecret"` } `yaml:"loginSession"` EmailValidation struct { @@ -124,9 +124,8 @@ type ( ConfirmationCode struct { MaxWrongAttemptsCount int64 `yaml:"maxWrongAttemptsCount"` } `yaml:"confirmationCode"` - DisableEmailSending bool `yaml:"disableEmailSending"` - ExtraLoadBalancersCount int `yaml:"extraLoadBalancersCount"` - EmailSendBatchSize int64 `yaml:"emailSendBatchSize"` + DisableEmailSending bool `yaml:"disableEmailSending"` + ExtraLoadBalancersCount int `yaml:"extraLoadBalancersCount"` } loginID struct { Email string `json:"email,omitempty" example:"someone1@example.com"` diff --git a/auth/email_link/emaillink.go b/auth/email_link/emaillink.go index e59a26de..a08bebaf 100644 --- a/auth/email_link/emaillink.go +++ b/auth/email_link/emaillink.go @@ -14,7 +14,6 @@ import ( stdlibtime "time" "github.com/golang-jwt/jwt/v5" - "github.com/hashicorp/go-multierror" "github.com/pkg/errors" "github.com/ice-blockchain/wintr/auth" @@ -32,23 +31,18 @@ func init() { } //nolint:funlen // . -func NewClient(ctx context.Context, userModifier UserModifier, authClient auth.Client) Client { +func NewClient(ctx context.Context, cancel context.CancelFunc, userModifier UserModifier, authClient auth.Client) Client { cfg := loadConfiguration() cfg.validate() db := storage.MustConnect(ctx, ddl, applicationYamlKey) - queueDB := storagev3.MustConnect(ctx, applicationYamlKey) - if initRateLimitErr := queueDB.SetNX(ctx, loginRateLimitKey, cfg.InitEmailRateLimit, 0).Err(); initRateLimitErr != nil { - log.Panic(errors.Wrapf(initRateLimitErr, "failed to init email sending rate limit")) - } - lock, err := storage.NewLock(ctx, db, loginQueueKey) - log.Panic(errors.Wrapf(err, "failed to initialize email queue lock")) //nolint:revive // . + //nolint:contextcheck // Used in queue processing. + queueDB := storagev3.MustConnect(context.Background(), applicationYamlKey) + log.Panic(errors.Wrapf(queueDB.SetNX(ctx, loginRateLimitKey, initEmailRateLimit, 0).Err(), "failed to init email sending rate limit")) //nolint:revive // . cl := &client{ - cfg: cfg, - shutdown: closeAll( - func(closeCtx context.Context) func() error { return func() error { return lock.Unlock(closeCtx) } }, - closerFunc(db.Close), closerFunc(queueDB.Close)), + cfg: cfg, + shutdown: db.Close, db: db, - emailQueueLock: lock, + cancel: cancel, queueDB: queueDB, authClient: authClient, userModifier: userModifier, @@ -75,32 +69,18 @@ func NewROClient(ctx context.Context) IceUserIDClient { db := storage.MustConnect(ctx, ddl, applicationYamlKey) return &client{ - shutdown: closeAll(closerFunc(db.Close)), + shutdown: db.Close, db: db, } } -func closerFunc(closeFunc func() error) func(closeCtx context.Context) func() error { - return func(_ context.Context) func() error { - return closeFunc +func (c *client) Close() error { + retErr := errors.Wrap(c.shutdown(), "closing auth/emaillink repository failed") + if c.cancel != nil { + c.cancel() } -} - -func closeAll(getclosers ...func(ctx context.Context) func() error) func(context.Context) error { - return func(ctx context.Context) error { - errs := make([]error, 0, len(getclosers)) - for _, closer := range getclosers { - if err := closer(ctx)(); err != nil { - errs = append(errs, err) - } - } - return multierror.Append(nil, errs...).ErrorOrNil() - } -} - -func (c *client) Close(ctx context.Context) error { - return errors.Wrap(c.shutdown(ctx), "closing auth/emaillink repository failed") + return retErr } func (c *client) CheckHealth(ctx context.Context) error { @@ -148,7 +128,6 @@ func loadLoginSessionConfiguration(cfg *config) { } } -//nolint:funlen // . func (cfg *config) validate() { if cfg.LoginSession.JwtSecret == "" { log.Panic(errors.New("no login session jwt secret provided")) @@ -177,12 +156,6 @@ func (cfg *config) validate() { if cfg.TeamName == "" { log.Panic("no team name specified") } - if cfg.EmailSendBatchSize == 0 { - log.Panic("emailSendBatchSize not specified") - } - if cfg.InitEmailRateLimit == "" { - log.Panic("initEmailRateLimit not specified") - } } func (t *emailTemplate) getSubject(data any) string { diff --git a/auth/email_link/link_start_auth.go b/auth/email_link/link_start_auth.go index 6756e07d..fb42d51b 100644 --- a/auth/email_link/link_start_auth.go +++ b/auth/email_link/link_start_auth.go @@ -157,13 +157,17 @@ func (c *client) sendEmailWithType(ctx context.Context, emailType, language stri tmpl = allEmailLinkTemplates[emailType][defaultLanguage] } dataBody := struct { - PetName string - AppName string - TeamName string + Email string + ConfirmationCode string + PetName string + AppName string + TeamName string }{ - PetName: c.cfg.PetName, - AppName: c.cfg.AppName, - TeamName: c.cfg.TeamName, + PetName: c.cfg.PetName, + AppName: c.cfg.AppName, + TeamName: c.cfg.TeamName, + Email: "{{.Email}}", + ConfirmationCode: "{{.ConfirmationCode}}", } dataSubject := struct { AppName string @@ -175,7 +179,7 @@ func (c *client) sendEmailWithType(ctx context.Context, emailType, language stri participants = append(participants, email.Participant{ Name: "", Email: toEmails[i], - SubstitutionFields: map[string]string{"-conf_code-": confirmationCodes[i], "-email-": toEmails[i]}, + SubstitutionFields: map[string]string{"{{.ConfirmationCode}}": confirmationCodes[i], "{{.Email}}": toEmails[i]}, }) } diff --git a/auth/email_link/queue.go b/auth/email_link/queue.go index 4bd62f38..eff20fb4 100644 --- a/auth/email_link/queue.go +++ b/auth/email_link/queue.go @@ -5,6 +5,7 @@ package emaillinkiceauth import ( "context" "fmt" + "math" "math/rand/v2" "strconv" "strings" @@ -15,21 +16,22 @@ import ( "github.com/redis/go-redis/v9" "github.com/ice-blockchain/wintr/connectors/storage/v2" + "github.com/ice-blockchain/wintr/email" "github.com/ice-blockchain/wintr/log" "github.com/ice-blockchain/wintr/time" ) //nolint:funlen // . -func (c *client) enqueueLoginAttempt(ctx context.Context, now *time.Time, email string) (queuePosition int64, rateLimit string, err error) { +func (c *client) enqueueLoginAttempt(ctx context.Context, now *time.Time, userEmail string) (queuePosition int64, rateLimit string, err error) { var result []redis.Cmder result, err = c.queueDB.TxPipelined(ctx, func(pipeliner redis.Pipeliner) error { if zErr := pipeliner.ZAddNX(ctx, loginQueueKey, redis.Z{ Score: float64(now.Nanosecond()), - Member: email, + Member: userEmail, }).Err(); zErr != nil { return zErr //nolint:wrapcheck // . } - if zRankErr := pipeliner.ZRank(ctx, loginQueueKey, email).Err(); zRankErr != nil { + if zRankErr := pipeliner.ZRank(ctx, loginQueueKey, userEmail).Err(); zRankErr != nil { return zRankErr //nolint:wrapcheck // . } @@ -52,7 +54,7 @@ func (c *client) enqueueLoginAttempt(ctx context.Context, now *time.Time, email rateLimit = strCmd.Val() case 1: intCmd := cmdRes.(*redis.IntCmd) //nolint:errcheck,forcetypeassert // . - queuePosition = intCmd.Val() + queuePosition = intCmd.Val() + 1 case 0: intCmd := cmdRes.(*redis.IntCmd) //nolint:errcheck,forcetypeassert // . if intCmd.Val() == 0 { @@ -61,7 +63,7 @@ func (c *client) enqueueLoginAttempt(ctx context.Context, now *time.Time, email } } if cmdErr := multierror.Append(nil, errs...).ErrorOrNil(); cmdErr != nil { - return queuePosition, rateLimit, errors.Wrapf(cmdErr, "failed to enqueue email %v", email) + return queuePosition, rateLimit, errors.Wrapf(cmdErr, "failed to enqueue email %v", userEmail) } return queuePosition, rateLimit, nil @@ -70,70 +72,100 @@ func (c *client) enqueueLoginAttempt(ctx context.Context, now *time.Time, email //nolint:funlen,gocognit,revive,contextcheck // Keep processing in signle place. func (c *client) processEmailQueue(rootCtx context.Context) { lastProcessed := time.Now() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - locked := false - defer func() { - if locked { - log.Error(errors.Wrapf(c.emailQueueLock.Unlock(ctx), "failed to unlock pg advisory emailQueueLock for email queue")) + + emailQueueLock := storage.NewMutex(c.db, loginQueueKey) + lockCtx, lockCancel := context.WithTimeout(context.Background(), 30*stdlibtime.Second) //nolint:gomnd // . + if err := emailQueueLock.Lock(lockCtx); err != nil { + if !errors.Is(err, storage.ErrMutexNotLocked) { + log.Panic(errors.Wrapf(err, "failed to obtain emailQueueLock for email queue")) } + } + lockCancel() + defer func() { + log.Error(errors.Wrapf(c.queueDB.Close(), "failed to close email queue db")) }() for rootCtx.Err() == nil { - var err error - locked, err = c.emailQueueLock.Obtain(ctx) //nolint:contextcheck // Background context. - if err != nil { - log.Panic(errors.Wrapf(err, "failed to obtain emailQueueLock for email queue")) - } - if !locked { - _ = wait(rootCtx, stdlibtime.Duration(1+rand.IntN(4))*stdlibtime.Second) //nolint:errcheck,gosec,gomnd // Nothing to rollback. + now := time.Now() + reqCtx, reqCancel := context.WithTimeout(context.Background(), 30*stdlibtime.Second) //nolint:gomnd // . + if lockErr := emailQueueLock.EnsureLocked(reqCtx); lockErr != nil { + reqCancel() + if errors.Is(lockErr, storage.ErrTxAborted) { + return + } + if errors.Is(lockErr, storage.ErrMutexNotLocked) { + _ = wait(rootCtx, stdlibtime.Duration(1+rand.IntN(4))*stdlibtime.Second) //nolint:errcheck,gosec,gomnd // Nothing to rollback. - continue + continue + } } - now := time.Now() - emails, scores, rateLimit, err := c.dequeueNextEmails(ctx) //nolint:contextcheck // Background context. + reqCancel() + reqCtx, reqCancel = context.WithTimeout(context.Background(), 30*stdlibtime.Second) //nolint:gomnd // . + emails, scores, rateLimit, err := c.dequeueNextEmails(reqCtx) //nolint:contextcheck // Background context. if err != nil { - log.Error(errors.Wrapf(err, "failed to fetch next %v emails in queue", c.cfg.EmailSendBatchSize)) + log.Error(errors.Wrapf(err, "failed to fetch next %v emails in queue", email.MaxBatchSize)) + reqCancel() + _ = wait(rootCtx, 1*stdlibtime.Second) //nolint:errcheck // Noting to rollback. continue } + reqCancel() + if len(emails) == 0 { - _ = wait(rootCtx, 10*stdlibtime.Second) //nolint:errcheck,gomnd // Nothing to rollback. log.Info("No emails in queue for sending") + _ = wait(rootCtx, 10*stdlibtime.Second) //nolint:errcheck,gomnd // Nothing to rollback. continue } - loginInformation, err := c.fetchLoginInformationForEmailBatch(ctx, now, emails) //nolint:contextcheck // Background context. - if err != nil { - log.Error(errors.Wrapf(err, "failed to fetch login information for emails: %v", emails)) - continue - } rlCount, rlDuration, rlErr := parseRateLimit(rateLimit) if rlErr != nil { + log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(emails, scores), "failed to rollback emails %#v back to queue", emails)) log.Panic(errors.Wrapf(rlErr, "failed to parse rate limit for email queue %v", rateLimit)) //nolint:revive // . + } + limit := int(math.Min(float64(rlCount), float64(len(emails)))) + if rlCount < len(emails) { + log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(emails[rlCount:], scores), "failed to rollback emails %#v back to queue cuz rate limit %v is less than batch %v", emails[rlCount:], rlCount, email.MaxBatchSize)) //nolint:lll // . + emails = emails[:rlCount] + } + + reqCtx, reqCancel = context.WithTimeout(context.Background(), 30*stdlibtime.Second) //nolint:gomnd // . + loginInformation, err := c.fetchLoginInformationForEmailBatch(reqCtx, now, emails, limit) + if err != nil { + log.Error(errors.Wrapf(err, "failed to fetch login information for emails: %v", emails)) + reqCancel() + log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(emails, scores), "failed to rollback emails %#v back to queue", emails)) + _ = wait(rootCtx, 1*stdlibtime.Second) //nolint:errcheck // Already rolled back. continue } + reqCancel() lastTimeBatchProcessingDuration := time.Now().Sub(*lastProcessed.Time) - rateLimitEstimationDuration := lastTimeBatchProcessingDuration * stdlibtime.Duration(int64(rlCount)/c.cfg.EmailSendBatchSize) + rateLimitEstimationDuration := lastTimeBatchProcessingDuration * stdlibtime.Duration(int64(rlCount)/int64(len(emails))) if rateLimitEstimationDuration < rlDuration { - oneBatchProcessingTimeToRespectRateLimit := stdlibtime.Duration(c.cfg.EmailSendBatchSize/int64(rlCount)) * rlDuration + oneBatchProcessingTimeToRespectRateLimit := stdlibtime.Duration(int64(len(emails))/int64(rlCount)) * rlDuration if wait(rootCtx, oneBatchProcessingTimeToRespectRateLimit) != nil { - //nolint:contextcheck // Background context. - log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(ctx, emails, scores), "failed to rollback fetched emails %#v back to queue", emails)) + log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(emails, scores), "failed to rollback fetched emails %#v back to queue", emails)) + + continue } } - - if failed, sErr := c.sendEmails(ctx, loginInformation); sErr != nil { //nolint:contextcheck // Background context. + reqCtx, reqCancel = context.WithTimeout(context.Background(), 30*stdlibtime.Second) //nolint:gomnd // . + if failed, sErr := c.sendEmails(reqCtx, loginInformation); sErr != nil { + reqCancel() log.Error(errors.Wrapf(sErr, "failed to send email batch for emails %#v", failed)) - log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(ctx, failed, scores), "failed to rollback failed emails %#v back to queue", failed)) + log.Error(errors.Wrapf(c.rollbackEmailsBackToQueue(failed, scores), "failed to rollback failed emails %#v back to queue", failed)) + stdlibtime.Sleep(1 * stdlibtime.Second) + + continue } + reqCancel() lastProcessed = time.Now() - stdlibtime.Sleep(1 * stdlibtime.Second) } } -func (c *client) rollbackEmailsBackToQueue(ctx context.Context, failed []string, scores map[string]int64) error { +func (c *client) rollbackEmailsBackToQueue(failed []string, scores map[string]int64) error { + rollbackCtx, rollbackCancel := context.WithTimeout(context.Background(), 30*stdlibtime.Second) //nolint:gomnd // . + defer rollbackCancel() failedZ := make([]redis.Z, 0, len(failed)) for _, failedEmail := range failed { failedZ = append(failedZ, redis.Z{ @@ -142,14 +174,14 @@ func (c *client) rollbackEmailsBackToQueue(ctx context.Context, failed []string, }) } - return errors.Wrapf(c.queueDB.ZAdd(ctx, loginQueueKey, failedZ...).Err(), "failed to rollback unsent emails %#v", failed) + return errors.Wrapf(c.queueDB.ZAddNX(rollbackCtx, loginQueueKey, failedZ...).Err(), "failed to rollback unsent emails %#v", failed) } //nolint:gocritic,revive // We need all the results from the pipeline func (c *client) dequeueNextEmails(ctx context.Context) (emailsBatch []string, scores map[string]int64, rateLimit string, err error) { var pipeRes []redis.Cmder pipeRes, err = c.queueDB.TxPipelined(ctx, func(pipeliner redis.Pipeliner) error { - if zpopErr := pipeliner.ZPopMin(ctx, loginQueueKey, c.cfg.EmailSendBatchSize).Err(); zpopErr != nil { + if zpopErr := pipeliner.ZPopMin(ctx, loginQueueKey, email.MaxBatchSize).Err(); zpopErr != nil { return zpopErr //nolint:wrapcheck // . } @@ -178,12 +210,12 @@ func (c *client) dequeueNextEmails(ctx context.Context) (emailsBatch []string, s return emailsBatch, scores, rate, nil } -func (c *client) fetchLoginInformationForEmailBatch(ctx context.Context, now *time.Time, emails []string) ([]*emailLinkSignIn, error) { +func (c *client) fetchLoginInformationForEmailBatch(ctx context.Context, now *time.Time, emails []string, limit int) ([]*emailLinkSignIn, error) { sql := fmt.Sprintf(` SELECT * FROM public.email_link_sign_ins WHERE email = ANY($1) AND created_at > ($2::TIMESTAMP - (%[2]v * interval '1 second')) ORDER BY created_at DESC - LIMIT %[1]v;`, c.cfg.EmailSendBatchSize, c.cfg.EmailValidation.ExpirationTime.Seconds()) + LIMIT %[1]v;`, limit, c.cfg.EmailValidation.ExpirationTime.Seconds()) res, err := storage.Select[emailLinkSignIn](ctx, c.db, sql, emails, now.Time) return res, err @@ -206,9 +238,9 @@ func parseRateLimit(rateLimit string) (int, stdlibtime.Duration, error) { func (c *client) sendEmails(ctx context.Context, emails []*emailLinkSignIn) (failed []string, err error) { emailsByLanguage := make(map[string][]string) confCodesByLanguage := make(map[string][]string) - for _, email := range emails { - emailsByLanguage[email.Language] = append(emailsByLanguage[email.Language], email.Email) - confCodesByLanguage[email.Language] = append(confCodesByLanguage[email.Language], email.ConfirmationCode) + for _, userEmail := range emails { + emailsByLanguage[userEmail.Language] = append(emailsByLanguage[userEmail.Language], userEmail.Email) + confCodesByLanguage[userEmail.Language] = append(confCodesByLanguage[userEmail.Language], userEmail.ConfirmationCode) } var mErr *multierror.Error for language := range emailsByLanguage { @@ -226,6 +258,8 @@ func wait(ctx context.Context, d stdlibtime.Duration) error { case <-stdlibtime.After(d): return nil case <-ctx.Done(): + log.Info("cancelled") + return context.Canceled } } diff --git a/auth/email_link/translations/email/modify_email/af.html b/auth/email_link/translations/email/modify_email/af.html index 1d96ec58..e3ce8fb2 100644 --- a/auth/email_link/translations/email/modify_email/af.html +++ b/auth/email_link/translations/email/modify_email/af.html @@ -3,8 +3,8 @@ -->

Hallo {{.PetName}},

-

Ons het 'n versoek ontvang om by {{.AppName}} aan te meld met hierdie e-posadres. As jy met jou -email- rekening wil aanmeld, gebruik hierdie bevestigingskode:

-

-conf_code-

+

Ons het 'n versoek ontvang om by {{.AppName}} aan te meld met hierdie e-posadres. As jy met jou {{.Email}} rekening wil aanmeld, gebruik hierdie bevestigingskode:

+

{{.ConfirmationCode}}

As jy nie hierdie kode aangevra het nie, kan jy hierdie e-pos veilig ignoreer.

Dankie,

{{.TeamName}}-span

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/am.html b/auth/email_link/translations/email/modify_email/am.html index e3b0f714..2aeb3fb4 100644 --- a/auth/email_link/translations/email/modify_email/am.html +++ b/auth/email_link/translations/email/modify_email/am.html @@ -3,8 +3,8 @@ -->

ሰላም {{.PetName}},

-

እነዚህን የኢሜል አድራሻ በመጠቀም ለ {{.AppName}} መግባት ጥያቄ ተቀብለናል። በ -email- አካውንት መግባት ከፈለጉ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

-

-conf_code-

+

እነዚህን የኢሜል አድራሻ በመጠቀም ለ {{.AppName}} መግባት ጥያቄ ተቀብለናል። በ {{.Email}} አካውንት መግባት ከፈለጉ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

+

{{.ConfirmationCode}}

ይህን ኮድ ካልጠየቁ፣ ይህን ኢሜል ማለፍ ይችላሉ።

አመሰግናለሁ,

{{.TeamName}} ቡድን

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ar.html b/auth/email_link/translations/email/modify_email/ar.html index dbab723a..c8b69511 100644 --- a/auth/email_link/translations/email/modify_email/ar.html +++ b/auth/email_link/translations/email/modify_email/ar.html @@ -3,8 +3,8 @@ -->

مرحبًا {{.PetName}}،

-

لقد تلقينا طلبًا لتسجيل الدخول إلى {{.AppName}} باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول باستخدام حساب -email- الخاص بك، فاستخدم رمز التأكيد هذا:

-

-conf_code-

+

لقد تلقينا طلبًا لتسجيل الدخول إلى {{.AppName}} باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول باستخدام حساب {{.Email}} الخاص بك، فاستخدم رمز التأكيد هذا:

+

{{.ConfirmationCode}}

إذا لم تطلب هذا الرمز، يمكنك تجاهل هذا البريد الإلكتروني بأمان.

شكرًا،

فريق {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/az.html b/auth/email_link/translations/email/modify_email/az.html index 71c41501..f2f7732f 100644 --- a/auth/email_link/translations/email/modify_email/az.html +++ b/auth/email_link/translations/email/modify_email/az.html @@ -3,8 +3,8 @@ -->

Salam {{.PetName}},

-

Bu e-poçt ünvanından istifadə edərək {{.AppName}}-ə daxil olmaq üçün sorğu aldıq. -email- hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

-

-conf_code-

+

Bu e-poçt ünvanından istifadə edərək {{.AppName}}-ə daxil olmaq üçün sorğu aldıq. {{.Email}} hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

+

{{.ConfirmationCode}}

Bu kodu tələb etməmisinizsə, bu e-poçtu etibarlı şəkildə yaddan çıxara bilərsiniz.

Təşəkkürlər,

{{.TeamName}} komandası

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/bg.html b/auth/email_link/translations/email/modify_email/bg.html index bc362481..a916b31f 100644 --- a/auth/email_link/translations/email/modify_email/bg.html +++ b/auth/email_link/translations/email/modify_email/bg.html @@ -3,8 +3,8 @@ -->

Здравейте {{.PetName}},

-

Получихме заявка за влизане в {{.AppName}}, използвайки този имейл адрес. Ако искате да влезете с акаунта си -email-, използвайте този код за потвърждение:

-

-conf_code-

+

Получихме заявка за влизане в {{.AppName}}, използвайки този имейл адрес. Ако искате да влезете с акаунта си {{.Email}}, използвайте този код за потвърждение:

+

{{.ConfirmationCode}}

Ако не сте заявявали този код, можете спокойно да игнорирате този имейл.

Благодарим ви,

Екипът на {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/bn.html b/auth/email_link/translations/email/modify_email/bn.html index b9f52d5a..de80da30 100644 --- a/auth/email_link/translations/email/modify_email/bn.html +++ b/auth/email_link/translations/email/modify_email/bn.html @@ -3,8 +3,8 @@ -->

হাই {{.PetName}},

-

আমরা এই ইমেল ঠিকানা ব্যবহার করে {{.AppName}} এ সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার -email- অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তাহলে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

-

-conf_code-

+

আমরা এই ইমেল ঠিকানা ব্যবহার করে {{.AppName}} এ সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার {{.Email}} অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তাহলে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

+

{{.ConfirmationCode}}

যদি আপনি এই কোডটির অনুরোধ না করে থাকেন, তাহলে আপনি নিরাপদে এই ইমেলটি উপেক্ষা করতে পারেন।

ধন্যবাদ,

{{.TeamName}} টিম

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/cs.html b/auth/email_link/translations/email/modify_email/cs.html index 058628c1..4e215746 100644 --- a/auth/email_link/translations/email/modify_email/cs.html +++ b/auth/email_link/translations/email/modify_email/cs.html @@ -3,8 +3,8 @@ -->

Ahoj {{.PetName}},

-

Obdrželi jsme žádost o přihlášení k {{.AppName}} pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí účtu -email-, použijte tento potvrzovací kód:

-

-conf_code-

+

Obdrželi jsme žádost o přihlášení k {{.AppName}} pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí účtu {{.Email}}, použijte tento potvrzovací kód:

+

{{.ConfirmationCode}}

Pokud jste tento kód nepožadovali, můžete tento e-mail bezpečně ignorovat.

Děkujeme,

Tým {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/de.html b/auth/email_link/translations/email/modify_email/de.html index dc9f2393..c76ff0aa 100644 --- a/auth/email_link/translations/email/modify_email/de.html +++ b/auth/email_link/translations/email/modify_email/de.html @@ -3,8 +3,8 @@ -->

Hallo {{.PetName}},

-

Wir haben eine Anfrage zum Anmelden bei {{.AppName}} mit dieser E-Mail-Adresse erhalten. Wenn Sie sich mit Ihrem -email- Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

-

-conf_code-

+

Wir haben eine Anfrage zum Anmelden bei {{.AppName}} mit dieser E-Mail-Adresse erhalten. Wenn Sie sich mit Ihrem {{.Email}} Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

+

{{.ConfirmationCode}}

Wenn Sie diesen Code nicht angefordert haben, können Sie diese E-Mail sicher ignorieren.

Danke,

Das {{.TeamName}}-Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/el.html b/auth/email_link/translations/email/modify_email/el.html index 47d6d070..d6c2c7ae 100644 --- a/auth/email_link/translations/email/modify_email/el.html +++ b/auth/email_link/translations/email/modify_email/el.html @@ -3,8 +3,8 @@ -->

Γεια σας {{.PetName}},

-

Λάβαμε ένα αίτημα για σύνδεση στο {{.AppName}} χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας -email-, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

-

-conf_code-

+

Λάβαμε ένα αίτημα για σύνδεση στο {{.AppName}} χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας {{.Email}}, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

+

{{.ConfirmationCode}}

Αν δεν ζητήσατε αυτόν τον κωδικό, μπορείτε να αγνοήσετε με ασφάλεια αυτό το email.

Ευχαριστούμε,

Η ομάδα {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/en.html b/auth/email_link/translations/email/modify_email/en.html index f2152d9b..bd36fc32 100644 --- a/auth/email_link/translations/email/modify_email/en.html +++ b/auth/email_link/translations/email/modify_email/en.html @@ -3,8 +3,8 @@ -->

Hi {{.PetName}},

-

We received a request to sign in to {{.AppName}} using this email address. If you want to sign in with your -email- account, use this confirmation code:

-

-conf_code-

+

We received a request to sign in to {{.AppName}} using this email address. If you want to sign in with your {{.Email}} account, use this confirmation code:

+

{{.ConfirmationCode}}

If you did not request this code, you can safely ignore this email.

Thanks,

{{.TeamName}} Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/es.html b/auth/email_link/translations/email/modify_email/es.html index 29eec40b..dfba5b72 100644 --- a/auth/email_link/translations/email/modify_email/es.html +++ b/auth/email_link/translations/email/modify_email/es.html @@ -3,8 +3,8 @@ -->

Hola {{.PetName}},

-

Hemos recibido una solicitud para iniciar sesión en {{.AppName}} usando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta -email-, utiliza este código de confirmación:

-

-conf_code-

+

Hemos recibido una solicitud para iniciar sesión en {{.AppName}} usando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta {{.Email}}, utiliza este código de confirmación:

+

{{.ConfirmationCode}}

Si no solicitaste este código, puedes ignorar este correo electrónico de manera segura.

Gracias,

Equipo de {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/fa.html b/auth/email_link/translations/email/modify_email/fa.html index d0000033..a536b964 100644 --- a/auth/email_link/translations/email/modify_email/fa.html +++ b/auth/email_link/translations/email/modify_email/fa.html @@ -3,8 +3,8 @@ -->

سلام {{.PetName}}،

-

ما درخواستی برای ورود به {{.AppName}} با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب -email- خود وارد شوید، از این کد تأیید استفاده کنید:

-

-conf_code-

+

ما درخواستی برای ورود به {{.AppName}} با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب {{.Email}} خود وارد شوید، از این کد تأیید استفاده کنید:

+

{{.ConfirmationCode}}

اگر این کد را درخواست نکرده‌اید، می‌توانید به راحتی این ایمیل را نادیده بگیرید.

با تشکر،

تیم {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/fr.html b/auth/email_link/translations/email/modify_email/fr.html index 9effff5a..9709b38b 100644 --- a/auth/email_link/translations/email/modify_email/fr.html +++ b/auth/email_link/translations/email/modify_email/fr.html @@ -3,8 +3,8 @@ -->

Bonjour {{.PetName}},

-

Nous avons reçu une demande de connexion à {{.AppName}} utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte -email-, utilisez ce code de confirmation :

-

-conf_code-

+

Nous avons reçu une demande de connexion à {{.AppName}} utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte {{.Email}}, utilisez ce code de confirmation :

+

{{.ConfirmationCode}}

Si vous n'avez pas demandé ce code, vous pouvez ignorer cet e-mail en toute sécurité.

Merci,

L'équipe {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/gu.html b/auth/email_link/translations/email/modify_email/gu.html index 6d086683..9cd640cc 100644 --- a/auth/email_link/translations/email/modify_email/gu.html +++ b/auth/email_link/translations/email/modify_email/gu.html @@ -3,8 +3,8 @@ -->

હાય {{.PetName}},

-

અમને આ ઇમેઇલ સરનામું વાપરીને {{.AppName}} માં સાઇન ઇન કરવાની વિનંતી મળી છે. જો તમે તમારા -email- ખાતા સાથે સાઇન ઇન કરવા માંગતા હો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

-

-conf_code-

+

અમને આ ઇમેઇલ સરનામું વાપરીને {{.AppName}} માં સાઇન ઇન કરવાની વિનંતી મળી છે. જો તમે તમારા {{.Email}} ખાતા સાથે સાઇન ઇન કરવા માંગતા હો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

+

{{.ConfirmationCode}}

જો તમે આ કોડની વિનંતી ન કરી હોય, તો તમે આ ઇમેઇલને સુરક્ષિત રીતે અવગણો છો.

આભાર,

{{.TeamName}} ટીમ

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/he.html b/auth/email_link/translations/email/modify_email/he.html index 33866e2c..c60b3fd8 100644 --- a/auth/email_link/translations/email/modify_email/he.html +++ b/auth/email_link/translations/email/modify_email/he.html @@ -3,8 +3,8 @@ -->

שלום {{.PetName}},

-

קיבלנו בקשה להתחבר ל-{{.AppName}} באמצעות כתובת דוא"ל זו. אם ברצונך להתחבר עם חשבון -email- שלך, השתמש בקוד האישור הזה:

-

-conf_code-

+

קיבלנו בקשה להתחבר ל-{{.AppName}} באמצעות כתובת דוא"ל זו. אם ברצונך להתחבר עם חשבון {{.Email}} שלך, השתמש בקוד האישור הזה:

+

{{.ConfirmationCode}}

אם לא ביקשת קוד זה, תוכל להתעלם מדוא"ל זה בבטחה.

תודה,

צוות {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/hi.html b/auth/email_link/translations/email/modify_email/hi.html index d9a9736a..96e9cfb0 100644 --- a/auth/email_link/translations/email/modify_email/hi.html +++ b/auth/email_link/translations/email/modify_email/hi.html @@ -3,8 +3,8 @@ -->

नमस्ते {{.PetName}},

-

हमें इस ईमेल पते का उपयोग करके {{.AppName}} में साइन इन करने का अनुरोध प्राप्त हुआ है। यदि आप अपने -email- खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

-

-conf_code-

+

हमें इस ईमेल पते का उपयोग करके {{.AppName}} में साइन इन करने का अनुरोध प्राप्त हुआ है। यदि आप अपने {{.Email}} खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

+

{{.ConfirmationCode}}

यदि आपने इस कोड का अनुरोध नहीं किया है, तो आप इस ईमेल को सुरक्षित रूप से अनदेखा कर सकते हैं।

धन्यवाद,

{{.TeamName}} टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/hu.html b/auth/email_link/translations/email/modify_email/hu.html index 9200651b..e75ac55c 100644 --- a/auth/email_link/translations/email/modify_email/hu.html +++ b/auth/email_link/translations/email/modify_email/hu.html @@ -3,8 +3,8 @@ -->

Szia {{.PetName}},

-

Kaptunk egy kérést, hogy jelentkezz be a {{.AppName}}-ba ezzel az email címmel. Ha a -email- fiókoddal szeretnél bejelentkezni, használd ezt a megerősítő kódot:

-

-conf_code-

+

Kaptunk egy kérést, hogy jelentkezz be a {{.AppName}}-ba ezzel az email címmel. Ha a {{.Email}} fiókoddal szeretnél bejelentkezni, használd ezt a megerősítő kódot:

+

{{.ConfirmationCode}}

Ha nem kérted ezt a kódot, biztonságosan figyelmen kívül hagyhatod ezt az emailt.

Köszönöm,

{{.TeamName}} csapat

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/id.html b/auth/email_link/translations/email/modify_email/id.html index afca5f36..574e4123 100644 --- a/auth/email_link/translations/email/modify_email/id.html +++ b/auth/email_link/translations/email/modify_email/id.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami menerima permintaan untuk masuk ke {{.AppName}} menggunakan alamat email ini. Jika Anda ingin masuk dengan akun -email- Anda, gunakan kode konfirmasi ini:

-

-conf_code-

+

Kami menerima permintaan untuk masuk ke {{.AppName}} menggunakan alamat email ini. Jika Anda ingin masuk dengan akun {{.Email}} Anda, gunakan kode konfirmasi ini:

+

{{.ConfirmationCode}}

Jika Anda tidak meminta kode ini, Anda dapat mengabaikan email ini dengan aman.

Terima kasih,

Tim {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/it.html b/auth/email_link/translations/email/modify_email/it.html index d1332762..f2e04952 100644 --- a/auth/email_link/translations/email/modify_email/it.html +++ b/auth/email_link/translations/email/modify_email/it.html @@ -3,8 +3,8 @@ -->

Ciao {{.PetName}},

-

Abbiamo ricevuto una richiesta per accedere a {{.AppName}} utilizzando questo indirizzo email. Se desideri accedere con il tuo account -email-, utilizza questo codice di conferma:

-

-conf_code-

+

Abbiamo ricevuto una richiesta per accedere a {{.AppName}} utilizzando questo indirizzo email. Se desideri accedere con il tuo account {{.Email}}, utilizza questo codice di conferma:

+

{{.ConfirmationCode}}

Se non hai richiesto questo codice, puoi ignorare questa email in tutta sicurezza.

Grazie,

Il team di {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ja.html b/auth/email_link/translations/email/modify_email/ja.html index 1719a4f4..bdd257fe 100644 --- a/auth/email_link/translations/email/modify_email/ja.html +++ b/auth/email_link/translations/email/modify_email/ja.html @@ -3,8 +3,8 @@ -->

こんにちは {{.PetName}}、

-

このメールアドレスを使用して{{.AppName}}にサインインするリクエストを受け取りました。 -email-アカウントでサインインする場合は、この確認コードを使用してください:

-

-conf_code-

+

このメールアドレスを使用して{{.AppName}}にサインインするリクエストを受け取りました。 {{.Email}}アカウントでサインインする場合は、この確認コードを使用してください:

+

{{.ConfirmationCode}}

このコードを要求していない場合は、このメールを無視してください。

ありがとう、

{{.TeamName}}チーム

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/jv.html b/auth/email_link/translations/email/modify_email/jv.html index 3e8687f6..f73cebc4 100644 --- a/auth/email_link/translations/email/modify_email/jv.html +++ b/auth/email_link/translations/email/modify_email/jv.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami nampi panyuwunan kanggo mlebu menyang {{.AppName}} nganggo alamat email iki. Yen sampeyan pengin mlebu nganggo akun -email- sampeyan, gunakake kode konfirmasi iki:

-

-conf_code-

+

Kami nampi panyuwunan kanggo mlebu menyang {{.AppName}} nganggo alamat email iki. Yen sampeyan pengin mlebu nganggo akun {{.Email}} sampeyan, gunakake kode konfirmasi iki:

+

{{.ConfirmationCode}}

Yen sampeyan ora nyuwun kode iki, sampeyan bisa nglirwakake email iki kanthi aman.

Matur nuwun,

Tim {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/kn.html b/auth/email_link/translations/email/modify_email/kn.html index edd57859..b733be58 100644 --- a/auth/email_link/translations/email/modify_email/kn.html +++ b/auth/email_link/translations/email/modify_email/kn.html @@ -3,8 +3,8 @@ -->

ನಮಸ್ಕಾರ {{.PetName}},

-

ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿ {{.AppName}} ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವ ವಿನಂತಿಯನ್ನು ನಾವು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ -email- ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

-

-conf_code-

+

ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿ {{.AppName}} ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವ ವಿನಂತಿಯನ್ನು ನಾವು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ {{.Email}} ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

+

{{.ConfirmationCode}}

ನೀವು ಈ ಕೋಡ್ ಅನ್ನು ಕೇಳದಿದ್ದರೆ, ನೀವು ಈ ಇಮೇಲ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ನಿರ್ಲಕ್ಷಿಸಬಹುದು.

ಧನ್ಯವಾದಗಳು,

{{.TeamName}} ತಂಡ

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ko.html b/auth/email_link/translations/email/modify_email/ko.html index b3e9a7cc..9d01a88a 100644 --- a/auth/email_link/translations/email/modify_email/ko.html +++ b/auth/email_link/translations/email/modify_email/ko.html @@ -3,8 +3,8 @@ -->

안녕하세요 {{.PetName}},

-

이 이메일 주소를 사용하여 {{.AppName}}에 로그인하려는 요청을 받았습니다. -email- 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

-

-conf_code-

+

이 이메일 주소를 사용하여 {{.AppName}}에 로그인하려는 요청을 받았습니다. {{.Email}} 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

+

{{.ConfirmationCode}}

이 코드를 요청하지 않은 경우 이 이메일을 무시해도 안전합니다.

감사합니다,

{{.TeamName}} 팀

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/mr.html b/auth/email_link/translations/email/modify_email/mr.html index d804af4f..77b1a5e9 100644 --- a/auth/email_link/translations/email/modify_email/mr.html +++ b/auth/email_link/translations/email/modify_email/mr.html @@ -3,8 +3,8 @@ -->

हाय {{.PetName}},

-

आम्हाला या ईमेल पत्त्याचा वापर करून {{.AppName}} मध्ये साइन इन करण्याची विनंती मिळाली आहे. आपण आपल्या -email- खात्याने साइन इन करू इच्छित असल्यास, हा पुष्टीकरण कोड वापरा:

-

-conf_code-

+

आम्हाला या ईमेल पत्त्याचा वापर करून {{.AppName}} मध्ये साइन इन करण्याची विनंती मिळाली आहे. आपण आपल्या {{.Email}} खात्याने साइन इन करू इच्छित असल्यास, हा पुष्टीकरण कोड वापरा:

+

{{.ConfirmationCode}}

जर आपण या कोडची विनंती केली नसेल, तर आपण हे ईमेल सुरक्षितपणे दुर्लक्ष करू शकता.

धन्यवाद,

{{.TeamName}} टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ms.html b/auth/email_link/translations/email/modify_email/ms.html index 22f22aee..880233ed 100644 --- a/auth/email_link/translations/email/modify_email/ms.html +++ b/auth/email_link/translations/email/modify_email/ms.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami menerima permintaan untuk log masuk ke {{.AppName}} menggunakan alamat e-mel ini. Jika anda ingin log masuk dengan akaun -email- anda, gunakan kod pengesahan ini:

-

-conf_code-

+

Kami menerima permintaan untuk log masuk ke {{.AppName}} menggunakan alamat e-mel ini. Jika anda ingin log masuk dengan akaun {{.Email}} anda, gunakan kod pengesahan ini:

+

{{.ConfirmationCode}}

Jika anda tidak meminta kod ini, anda boleh mengabaikan e-mel ini dengan selamat.

Terima kasih,

Pasukan {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/nb.html b/auth/email_link/translations/email/modify_email/nb.html index c46a59f7..cba83e7a 100644 --- a/auth/email_link/translations/email/modify_email/nb.html +++ b/auth/email_link/translations/email/modify_email/nb.html @@ -3,8 +3,8 @@ -->

Hei {{.PetName}},

-

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

-

-conf_code-

+

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

+

{{.ConfirmationCode}}

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,

{{.TeamName}}-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/nn.html b/auth/email_link/translations/email/modify_email/nn.html index c46a59f7..cba83e7a 100644 --- a/auth/email_link/translations/email/modify_email/nn.html +++ b/auth/email_link/translations/email/modify_email/nn.html @@ -3,8 +3,8 @@ -->

Hei {{.PetName}},

-

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

-

-conf_code-

+

Vi mottok en forespørsel om å logge inn på {{.AppName}} med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

+

{{.ConfirmationCode}}

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,

{{.TeamName}}-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/pa-in.html b/auth/email_link/translations/email/modify_email/pa-in.html index 30e1c745..f0d8f084 100644 --- a/auth/email_link/translations/email/modify_email/pa-in.html +++ b/auth/email_link/translations/email/modify_email/pa-in.html @@ -3,8 +3,8 @@ -->

ਹੈਲੋ {{.PetName}},

-

ਸਾਨੂੰ ਇਸ ਈਮੇਲ ਪਤੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ {{.AppName}} ਵਿੱਚ ਸਾਇਨ ਇਨ ਕਰਨ ਦੀ ਬੇਨਤੀ ਮਿਲੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ -email- ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦੀ ਵਰਤੋਂ ਕਰੋ:

-

-conf_code-

+

ਸਾਨੂੰ ਇਸ ਈਮੇਲ ਪਤੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ {{.AppName}} ਵਿੱਚ ਸਾਇਨ ਇਨ ਕਰਨ ਦੀ ਬੇਨਤੀ ਮਿਲੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ {{.Email}} ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦੀ ਵਰਤੋਂ ਕਰੋ:

+

{{.ConfirmationCode}}

ਜੇ ਤੁਸੀਂ ਇਸ ਕੋਡ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਈਮੇਲ ਨੂੰ ਸੁਰੱਖਿਅਤ ਤੌਰ ਤੇ ਅਣਡਿੱਠ ਕਰ ਸਕਦੇ ਹੋ।

ਧੰਨਵਾਦ,

{{.TeamName}} ਟੀਮ

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/pl.html b/auth/email_link/translations/email/modify_email/pl.html index d6c5ba49..54b6c30b 100644 --- a/auth/email_link/translations/email/modify_email/pl.html +++ b/auth/email_link/translations/email/modify_email/pl.html @@ -3,8 +3,8 @@ -->

Witaj {{.PetName}},

-

Otrzymaliśmy prośbę o zalogowanie się do {{.AppName}} przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się za pomocą konta -email-, użyj tego kodu potwierdzającego:

-

-conf_code-

+

Otrzymaliśmy prośbę o zalogowanie się do {{.AppName}} przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się za pomocą konta {{.Email}}, użyj tego kodu potwierdzającego:

+

{{.ConfirmationCode}}

Jeśli nie żądałeś tego kodu, możesz bezpiecznie zignorować tego e-maila.

Dziękujemy,

Zespół {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ps.html b/auth/email_link/translations/email/modify_email/ps.html index f8dcd713..c9390f10 100644 --- a/auth/email_link/translations/email/modify_email/ps.html +++ b/auth/email_link/translations/email/modify_email/ps.html @@ -3,8 +3,8 @@ -->

سلام {{.PetName}}،

-

موږ د دې بریښنالیک پته په کارولو سره {{.AppName}} ته د ننوتلو غوښتنه ترلاسه کړه. که تاسو غواړئ د خپل -email- حساب سره ننوځئ، دا تایید کوډ وکاروئ:

-

-conf_code-

+

موږ د دې بریښنالیک پته په کارولو سره {{.AppName}} ته د ننوتلو غوښتنه ترلاسه کړه. که تاسو غواړئ د خپل {{.Email}} حساب سره ننوځئ، دا تایید کوډ وکاروئ:

+

{{.ConfirmationCode}}

که تاسو دا کوډ نه وي غوښتنه کړې، تاسو کولی شئ په خوندي توګه دا بریښنالیک له پامه وغورځوئ.

مننه،

د {{.AppName}} ټیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/pt.html b/auth/email_link/translations/email/modify_email/pt.html index ccc01b67..3d019af2 100644 --- a/auth/email_link/translations/email/modify_email/pt.html +++ b/auth/email_link/translations/email/modify_email/pt.html @@ -3,8 +3,8 @@ -->

Olá {{.PetName}},

-

Recebemos um pedido para entrar no {{.AppName}} usando este endereço de e-mail. Se você deseja entrar com sua conta -email-, use este código de confirmação:

-

-conf_code-

+

Recebemos um pedido para entrar no {{.AppName}} usando este endereço de e-mail. Se você deseja entrar com sua conta {{.Email}}, use este código de confirmação:

+

{{.ConfirmationCode}}

Se você não solicitou este código, pode ignorar este e-mail com segurança.

Obrigado,

Equipe {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ro.html b/auth/email_link/translations/email/modify_email/ro.html index 0aafbbbd..6a1f514a 100644 --- a/auth/email_link/translations/email/modify_email/ro.html +++ b/auth/email_link/translations/email/modify_email/ro.html @@ -3,8 +3,8 @@ -->

Bună {{.PetName}},

-

Am primit o solicitare pentru a vă conecta la {{.AppName}} folosind această adresă de email. Dacă doriți să vă conectați cu contul dvs. -email-, folosiți acest cod de confirmare:

-

-conf_code-

+

Am primit o solicitare pentru a vă conecta la {{.AppName}} folosind această adresă de email. Dacă doriți să vă conectați cu contul dvs. {{.Email}}, folosiți acest cod de confirmare:

+

{{.ConfirmationCode}}

Dacă nu ați solicitat acest cod, puteți ignora acest email în siguranță.

Mulțumim,

Echipa {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ru.html b/auth/email_link/translations/email/modify_email/ru.html index b699e5e3..8fa90038 100644 --- a/auth/email_link/translations/email/modify_email/ru.html +++ b/auth/email_link/translations/email/modify_email/ru.html @@ -3,8 +3,8 @@ -->

Привет {{.PetName}},

-

Мы получили запрос на вход в {{.AppName}} с использованием этого адреса электронной почты. Если вы хотите войти с вашей учетной записью -email-, используйте этот код подтверждения:

-

-conf_code-

+

Мы получили запрос на вход в {{.AppName}} с использованием этого адреса электронной почты. Если вы хотите войти с вашей учетной записью {{.Email}}, используйте этот код подтверждения:

+

{{.ConfirmationCode}}

Если вы не запрашивали этот код, вы можете спокойно проигнорировать это письмо.

Спасибо,

Команда {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sd.html b/auth/email_link/translations/email/modify_email/sd.html index 8975d8aa..f2813153 100644 --- a/auth/email_link/translations/email/modify_email/sd.html +++ b/auth/email_link/translations/email/modify_email/sd.html @@ -3,8 +3,8 @@ -->

هيلو {{.PetName}}،

-

اسان کي هي اي ميل ايڊريس استعمال ڪندي {{.AppName}} ۾ سائن ان ڪرڻ جي درخواست ملي آهي. جيڪڏهن توهان پنهنجي -email- اڪائونٽ سان سائن ان ڪرڻ چاهيو ٿا، ته هن تصديق ڪوڊ کي استعمال ڪريو:

-

-conf_code-

+

اسان کي هي اي ميل ايڊريس استعمال ڪندي {{.AppName}} ۾ سائن ان ڪرڻ جي درخواست ملي آهي. جيڪڏهن توهان پنهنجي {{.Email}} اڪائونٽ سان سائن ان ڪرڻ چاهيو ٿا، ته هن تصديق ڪوڊ کي استعمال ڪريو:

+

{{.ConfirmationCode}}

جيڪڏهن توهان هن ڪوڊ جي درخواست نه ڪئي آهي، ته توهان هن اي ميل کي محفوظ طريقي سان نظرانداز ڪري سگهو ٿا.

مهرباني،

{{.TeamName}} ٽيم

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sk.html b/auth/email_link/translations/email/modify_email/sk.html index 9fa92486..029eb5f7 100644 --- a/auth/email_link/translations/email/modify_email/sk.html +++ b/auth/email_link/translations/email/modify_email/sk.html @@ -3,8 +3,8 @@ -->

Ahoj {{.PetName}},

-

Obdržali sme žiadosť o prihlásenie k {{.AppName}} pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou účtu -email-, použite tento potvrdzovací kód:

-

-conf_code-

+

Obdržali sme žiadosť o prihlásenie k {{.AppName}} pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou účtu {{.Email}}, použite tento potvrdzovací kód:

+

{{.ConfirmationCode}}

Ak ste tento kód nepožadovali, môžete tento e-mail bezpečne ignorovať.

Ďakujeme,

Tím {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sl.html b/auth/email_link/translations/email/modify_email/sl.html index e03c2eca..7adeb215 100644 --- a/auth/email_link/translations/email/modify_email/sl.html +++ b/auth/email_link/translations/email/modify_email/sl.html @@ -3,8 +3,8 @@ -->

Zdravo {{.PetName}},

-

Prejeli smo zahtevo za prijavo v {{.AppName}} z uporabo tega e-poštnega naslova. Če želite prijaviti s svojim računom -email-, uporabite to potrditveno kodo:

-

-conf_code-

+

Prejeli smo zahtevo za prijavo v {{.AppName}} z uporabo tega e-poštnega naslova. Če želite prijaviti s svojim računom {{.Email}}, uporabite to potrditveno kodo:

+

{{.ConfirmationCode}}

Če te kode niste zahtevali, lahko to e-pošto varno prezrete.

Hvala,

Ekipa {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sq.html b/auth/email_link/translations/email/modify_email/sq.html index db84f97a..ba8a5daa 100644 --- a/auth/email_link/translations/email/modify_email/sq.html +++ b/auth/email_link/translations/email/modify_email/sq.html @@ -3,8 +3,8 @@ -->

Përshëndetje {{.PetName}},

-

Ne kemi marrë një kërkesë për të hyrë në {{.AppName}} duke përdorur këtë adresë emaili. Nëse dëshironi të identifikoheni me llogarinë tuaj -email-, përdorni këtë kod konfirmimi:

-

-conf_code-

+

Ne kemi marrë një kërkesë për të hyrë në {{.AppName}} duke përdorur këtë adresë emaili. Nëse dëshironi të identifikoheni me llogarinë tuaj {{.Email}}, përdorni këtë kod konfirmimi:

+

{{.ConfirmationCode}}

Nëse nuk e keni kërkuar këtë kod, mund ta injoroni këtë email në mënyrë të sigurt.

Faleminderit,

Ekipi {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/su.html b/auth/email_link/translations/email/modify_email/su.html index 0a1dd04c..fd6d992f 100644 --- a/auth/email_link/translations/email/modify_email/su.html +++ b/auth/email_link/translations/email/modify_email/su.html @@ -3,8 +3,8 @@ -->

Hai {{.PetName}},

-

Kami nampi paménta pikeun asup ka {{.AppName}} nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun -email- anjeun, anggo kode konfirmasi ieu:

-

-conf_code-

+

Kami nampi paménta pikeun asup ka {{.AppName}} nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun {{.Email}} anjeun, anggo kode konfirmasi ieu:

+

{{.ConfirmationCode}}

Upami anjeun henteu nyuhunkeun kode ieu, anjeun tiasa ngabaikan email ieu kalayan aman.

Hatur nuhun,

Tim {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/sv.html b/auth/email_link/translations/email/modify_email/sv.html index e0128c27..a688e25b 100644 --- a/auth/email_link/translations/email/modify_email/sv.html +++ b/auth/email_link/translations/email/modify_email/sv.html @@ -3,8 +3,8 @@ -->

Hej {{.PetName}},

-

Vi har mottagit en begäran om att logga in på {{.AppName}} med denna e-postadress. Om du vill logga in med ditt -email--konto, använd denna bekräftelsekod:

-

-conf_code-

+

Vi har mottagit en begäran om att logga in på {{.AppName}} med denna e-postadress. Om du vill logga in med ditt {{.Email}}-konto, använd denna bekräftelsekod:

+

{{.ConfirmationCode}}

Om du inte har begärt denna kod kan du säkert ignorera detta e-postmeddelande.

Tack,

{{.TeamName}}-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ta.html b/auth/email_link/translations/email/modify_email/ta.html index 31687d82..6ed1da2f 100644 --- a/auth/email_link/translations/email/modify_email/ta.html +++ b/auth/email_link/translations/email/modify_email/ta.html @@ -3,8 +3,8 @@ -->

வணக்கம் {{.PetName}},

-

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி {{.AppName}} இல் உள்நுழைய வேண்டுமெனும் கோரிக்கையைப் பெற்றுள்ளோம். உங்கள் -email- கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்பாட்டு குறியீட்டைப் பயன்படுத்தவும்:

-

-conf_code-

+

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி {{.AppName}} இல் உள்நுழைய வேண்டுமெனும் கோரிக்கையைப் பெற்றுள்ளோம். உங்கள் {{.Email}} கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்பாட்டு குறியீட்டைப் பயன்படுத்தவும்:

+

{{.ConfirmationCode}}

நீங்கள் இந்த குறியீட்டை கோரவில்லை என்றால், இந்த மின்னஞ்சலைப் புறக்கணிக்கலாம்.

நன்றி,

{{.TeamName}} குழு

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/te.html b/auth/email_link/translations/email/modify_email/te.html index b63c875d..7076ec13 100644 --- a/auth/email_link/translations/email/modify_email/te.html +++ b/auth/email_link/translations/email/modify_email/te.html @@ -3,8 +3,8 @@ -->

హలో {{.PetName}},

-

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి {{.AppName}} లో సైన్ ఇన్ చేయడానికి మేము అభ్యర్థనను స్వీకరించాము. మీ -email- ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ను ఉపయోగించండి:

-

-conf_code-

+

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి {{.AppName}} లో సైన్ ఇన్ చేయడానికి మేము అభ్యర్థనను స్వీకరించాము. మీ {{.Email}} ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ను ఉపయోగించండి:

+

{{.ConfirmationCode}}

మీరు ఈ కోడ్‌ను అభ్యర్థించలేదు అయితే, మీరు ఈ ఇమెయిల్‌ను నిర్ధాక్షిణ్యంగా లెక్కచేయకపోవచ్చు.

ధన్యవాదాలు,

{{.TeamName}} బృందం

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/th.html b/auth/email_link/translations/email/modify_email/th.html index 139420ff..8b61dfe0 100644 --- a/auth/email_link/translations/email/modify_email/th.html +++ b/auth/email_link/translations/email/modify_email/th.html @@ -3,8 +3,8 @@ -->

สวัสดี {{.PetName}},

-

เราได้รับคำขอให้ลงชื่อเข้าใช้ {{.AppName}} โดยใช้ที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี -email- ของคุณ ให้ใช้รหัสยืนยันนี้:

-

-conf_code-

+

เราได้รับคำขอให้ลงชื่อเข้าใช้ {{.AppName}} โดยใช้ที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี {{.Email}} ของคุณ ให้ใช้รหัสยืนยันนี้:

+

{{.ConfirmationCode}}

หากคุณไม่ได้ขอรหัสนี้ คุณสามารถละเว้นอีเมลนี้ได้อย่างปลอดภัย

ขอบคุณ,

ทีมงาน {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/tl-ph.html b/auth/email_link/translations/email/modify_email/tl-ph.html index 9d30e210..01b0d93a 100644 --- a/auth/email_link/translations/email/modify_email/tl-ph.html +++ b/auth/email_link/translations/email/modify_email/tl-ph.html @@ -3,8 +3,8 @@ -->

Kumusta {{.PetName}},

-

Nakatanggap kami ng kahilingan upang mag-sign in sa {{.AppName}} gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong -email- account, gamitin ang kumpirmasyon na code na ito:

-

-conf_code-

+

Nakatanggap kami ng kahilingan upang mag-sign in sa {{.AppName}} gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong {{.Email}} account, gamitin ang kumpirmasyon na code na ito:

+

{{.ConfirmationCode}}

Kung hindi mo hiningi ang code na ito, maaari mong balewalain ang email na ito ng ligtas.

Salamat,

{{.TeamName}} Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/tr.html b/auth/email_link/translations/email/modify_email/tr.html index 3a5aab83..db32c805 100644 --- a/auth/email_link/translations/email/modify_email/tr.html +++ b/auth/email_link/translations/email/modify_email/tr.html @@ -3,8 +3,8 @@ -->

Merhaba {{.PetName}},

-

Bu e-posta adresini kullanarak {{.AppName}}'e giriş yapma talebi aldık. -email- hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

-

-conf_code-

+

Bu e-posta adresini kullanarak {{.AppName}}'e giriş yapma talebi aldık. {{.Email}} hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

+

{{.ConfirmationCode}}

Bu kodu talep etmediyseniz, bu e-postayı güvenle göz ardı edebilirsiniz.

Teşekkürler,

{{.TeamName}} Ekibi

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/uk.html b/auth/email_link/translations/email/modify_email/uk.html index 48b5aac4..13fd2b3e 100644 --- a/auth/email_link/translations/email/modify_email/uk.html +++ b/auth/email_link/translations/email/modify_email/uk.html @@ -3,8 +3,8 @@ -->

Привіт {{.PetName}},

-

Ми отримали запит на вхід до {{.AppName}}, використовуючи цю електронну адресу. Якщо ви хочете увійти з вашим обліковим записом -email-, використовуйте цей код підтвердження:

-

-conf_code-

+

Ми отримали запит на вхід до {{.AppName}}, використовуючи цю електронну адресу. Якщо ви хочете увійти з вашим обліковим записом {{.Email}}, використовуйте цей код підтвердження:

+

{{.ConfirmationCode}}

Якщо ви не запитували цей код, можете безпечно ігнорувати цей лист.

Дякуємо,

Команда {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/ur.html b/auth/email_link/translations/email/modify_email/ur.html index 39f2bb79..17d9a39e 100644 --- a/auth/email_link/translations/email/modify_email/ur.html +++ b/auth/email_link/translations/email/modify_email/ur.html @@ -3,8 +3,8 @@ -->

ہیلو {{.PetName}}،

-

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے {{.AppName}} میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے -email- اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو، اس تصدیقی کوڈ کا استعمال کریں:

-

-conf_code-

+

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے {{.AppName}} میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے {{.Email}} اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو، اس تصدیقی کوڈ کا استعمال کریں:

+

{{.ConfirmationCode}}

اگر آپ نے اس کوڈ کی درخواست نہیں کی، تو آپ اس ای میل کو محفوظ طریقے سے نظرانداز کر سکتے ہیں۔

شکریہ،

{{.TeamName}} ٹیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/vi.html b/auth/email_link/translations/email/modify_email/vi.html index 6c96e7f4..568ce42d 100644 --- a/auth/email_link/translations/email/modify_email/vi.html +++ b/auth/email_link/translations/email/modify_email/vi.html @@ -3,8 +3,8 @@ -->

Chào {{.PetName}},

-

Chúng tôi đã nhận được yêu cầu đăng nhập vào {{.AppName}} bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản -email- của mình, hãy sử dụng mã xác nhận này:

-

-conf_code-

+

Chúng tôi đã nhận được yêu cầu đăng nhập vào {{.AppName}} bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản {{.Email}} của mình, hãy sử dụng mã xác nhận này:

+

{{.ConfirmationCode}}

Nếu bạn không yêu cầu mã này, bạn có thể bỏ qua email này một cách an toàn.

Cảm ơn,

Đội ngũ {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/yo.html b/auth/email_link/translations/email/modify_email/yo.html index eda1cb9b..c663668b 100644 --- a/auth/email_link/translations/email/modify_email/yo.html +++ b/auth/email_link/translations/email/modify_email/yo.html @@ -3,8 +3,8 @@ -->

Pẹlẹ o {{.PetName}},

-

A gba ibeere lati wọle si {{.AppName}} nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ -email- rẹ, lo koodu ijẹrisi yii:

-

-conf_code-

+

A gba ibeere lati wọle si {{.AppName}} nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ {{.Email}} rẹ, lo koodu ijẹrisi yii:

+

{{.ConfirmationCode}}

Ti o ko ba beere fun koodu yii, o le foju imeeli yii lailewu.

O ṣeun,

Ẹgbẹ {{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/zh-cn.html b/auth/email_link/translations/email/modify_email/zh-cn.html index d498b6b4..a34fd03d 100644 --- a/auth/email_link/translations/email/modify_email/zh-cn.html +++ b/auth/email_link/translations/email/modify_email/zh-cn.html @@ -3,8 +3,8 @@ -->

你好 {{.PetName}},

-

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用-email-帐户登录,请使用此确认码:

-

-conf_code-

+

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用{{.Email}}帐户登录,请使用此确认码:

+

{{.ConfirmationCode}}

如果您没有请求此代码,可以安全地忽略此电子邮件。

谢谢,

{{.TeamName}}团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/zh.html b/auth/email_link/translations/email/modify_email/zh.html index d498b6b4..a34fd03d 100644 --- a/auth/email_link/translations/email/modify_email/zh.html +++ b/auth/email_link/translations/email/modify_email/zh.html @@ -3,8 +3,8 @@ -->

你好 {{.PetName}},

-

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用-email-帐户登录,请使用此确认码:

-

-conf_code-

+

我们收到一个请求,使用此电子邮件地址登录{{.AppName}}。如果您希望使用{{.Email}}帐户登录,请使用此确认码:

+

{{.ConfirmationCode}}

如果您没有请求此代码,可以安全地忽略此电子邮件。

谢谢,

{{.TeamName}}团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/modify_email/zu.html b/auth/email_link/translations/email/modify_email/zu.html index c4182d0e..6f7385aa 100644 --- a/auth/email_link/translations/email/modify_email/zu.html +++ b/auth/email_link/translations/email/modify_email/zu.html @@ -3,8 +3,8 @@ -->

Sawubona {{.PetName}},

-

Sithole isicelo sokungena ku-{{.AppName}} sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho ye--email-, sebenzisa le khodi yokuqinisekisa:

-

-conf_code-

+

Sithole isicelo sokungena ku-{{.AppName}} sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho ye-{{.Email}}, sebenzisa le khodi yokuqinisekisa:

+

{{.ConfirmationCode}}

Uma ungacelanga le khodi, ungayinaki le imeyili ngokuphepha.

Siyabonga,

Iqembu le-{{.TeamName}}

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/af.html b/auth/email_link/translations/email/signin/af.html index b79db91d..e75abbd2 100644 --- a/auth/email_link/translations/email/signin/af.html +++ b/auth/email_link/translations/email/signin/af.html @@ -3,7 +3,7 @@ -->

Hallo,

-

Ons het 'n versoek ontvang om by ons toepassing aan te meld met hierdie e-posadres. As jy met jou -email--rekening wil aanmeld, gebruik hierdie bevestigingskode:

-

-conf_code-

+

Ons het 'n versoek ontvang om by ons toepassing aan te meld met hierdie e-posadres. As jy met jou {{.Email}}-rekening wil aanmeld, gebruik hierdie bevestigingskode:

+

{{.ConfirmationCode}}

As jy nie hierdie kode versoek het nie, kan jy hierdie e-pos veilig ignoreer.

Dankie,
Ice Labs-span

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/am.html b/auth/email_link/translations/email/signin/am.html index c44cc6f9..cd4744f5 100644 --- a/auth/email_link/translations/email/signin/am.html +++ b/auth/email_link/translations/email/signin/am.html @@ -3,7 +3,7 @@ -->

ሰላም,

-

በዚህ ኢሜል አድራሻ ለመግባት ጥያቄ እንቀበላለን። ከ-email- መለያ ጋር ለመግባት፣ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

-

-conf_code-

+

በዚህ ኢሜል አድራሻ ለመግባት ጥያቄ እንቀበላለን። ከ{{.Email}} መለያ ጋር ለመግባት፣ ይህን የማረጋገጫ ኮድ ተጠቀሙ:

+

{{.ConfirmationCode}}

ይህን ኮድ ካልጠየቃችሁ፣ ይህን ኢሜል በደኅና ማግኘት ይችላሉ።

አመሰግናለሁ,
Ice Labs ቡድን

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ar.html b/auth/email_link/translations/email/signin/ar.html index 631179cf..68d73660 100644 --- a/auth/email_link/translations/email/signin/ar.html +++ b/auth/email_link/translations/email/signin/ar.html @@ -3,7 +3,7 @@ -->

مرحبًا،

-

لقد تلقينا طلبًا لتسجيل الدخول إلى تطبيقنا باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول بحسابك -email-، فاستخدم رمز التأكيد هذا:

-

-conf_code-

+

لقد تلقينا طلبًا لتسجيل الدخول إلى تطبيقنا باستخدام عنوان البريد الإلكتروني هذا. إذا كنت ترغب في تسجيل الدخول بحسابك {{.Email}}، فاستخدم رمز التأكيد هذا:

+

{{.ConfirmationCode}}

إذا لم تطلب هذا الرمز، يمكنك تجاهل هذا البريد الإلكتروني بأمان.

شكرًا،
فريق Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/az.html b/auth/email_link/translations/email/signin/az.html index 12e7c85d..d2d84f9b 100644 --- a/auth/email_link/translations/email/signin/az.html +++ b/auth/email_link/translations/email/signin/az.html @@ -3,7 +3,7 @@ -->

Salam,

-

Bu e-poçt ünvanından istifadə edərək tətbiqimizə daxil olmaq üçün bir sorğu aldıq. -email- hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

-

-conf_code-

+

Bu e-poçt ünvanından istifadə edərək tətbiqimizə daxil olmaq üçün bir sorğu aldıq. {{.Email}} hesabınızla daxil olmaq istəyirsinizsə, bu təsdiq kodundan istifadə edin:

+

{{.ConfirmationCode}}

Əgər bu kodu tələb etməmisinizsə, bu e-poçtu təhlükəsiz şəkildə gözardı edə bilərsiniz.

Təşəkkürlər,
Ice Labs komandası

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/bg.html b/auth/email_link/translations/email/signin/bg.html index 62441e1f..72e31baf 100644 --- a/auth/email_link/translations/email/signin/bg.html +++ b/auth/email_link/translations/email/signin/bg.html @@ -3,7 +3,7 @@ -->

Здравейте,

-

Получихме заявка за вход в нашето приложение, използвайки този имейл адрес. Ако искате да влезете с вашия акаунт -email-, използвайте този код за потвърждение:

-

-conf_code-

+

Получихме заявка за вход в нашето приложение, използвайки този имейл адрес. Ако искате да влезете с вашия акаунт {{.Email}}, използвайте този код за потвърждение:

+

{{.ConfirmationCode}}

Ако не сте заявявали този код, можете спокойно да игнорирате този имейл.

Благодарим ви,
Екипът на Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/bn.html b/auth/email_link/translations/email/signin/bn.html index 93180f69..614e10ec 100644 --- a/auth/email_link/translations/email/signin/bn.html +++ b/auth/email_link/translations/email/signin/bn.html @@ -3,7 +3,7 @@ -->

হাই,

-

আমরা আমাদের অ্যাপ্লিকেশনটিতে এই ইমেল ঠিকানাটি ব্যবহার করে সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার -email- অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তবে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

-

-conf_code-

+

আমরা আমাদের অ্যাপ্লিকেশনটিতে এই ইমেল ঠিকানাটি ব্যবহার করে সাইন ইন করার জন্য একটি অনুরোধ পেয়েছি। আপনি যদি আপনার {{.Email}} অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, তবে এই নিশ্চিতকরণ কোডটি ব্যবহার করুন:

+

{{.ConfirmationCode}}

আপনি যদি এই কোডটি অনুরোধ না করেন, তবে আপনি নিরাপদে এই ইমেলটি উপেক্ষা করতে পারেন।

ধন্যবাদ,
Ice Labs টিম

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/cs.html b/auth/email_link/translations/email/signin/cs.html index b4be02a9..b25dc3fa 100644 --- a/auth/email_link/translations/email/signin/cs.html +++ b/auth/email_link/translations/email/signin/cs.html @@ -3,7 +3,7 @@ -->

Ahoj,

-

Obdrželi jsme žádost o přihlášení do naší aplikace pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí svého účtu -email-, použijte tento potvrzovací kód:

-

-conf_code-

+

Obdrželi jsme žádost o přihlášení do naší aplikace pomocí této e-mailové adresy. Pokud se chcete přihlásit pomocí svého účtu {{.Email}}, použijte tento potvrzovací kód:

+

{{.ConfirmationCode}}

Pokud jste o tento kód nežádali, můžete tento e-mail bezpečně ignorovat.

Děkujeme,
Tým Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/de.html b/auth/email_link/translations/email/signin/de.html index dba161b1..a3b18bf1 100644 --- a/auth/email_link/translations/email/signin/de.html +++ b/auth/email_link/translations/email/signin/de.html @@ -3,7 +3,7 @@ -->

Hallo,

-

Wir haben eine Anfrage erhalten, sich mit dieser E-Mail-Adresse bei unserer Anwendung anzumelden. Wenn Sie sich mit Ihrem -email--Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

-

-conf_code-

+

Wir haben eine Anfrage erhalten, sich mit dieser E-Mail-Adresse bei unserer Anwendung anzumelden. Wenn Sie sich mit Ihrem {{.Email}}-Konto anmelden möchten, verwenden Sie diesen Bestätigungscode:

+

{{.ConfirmationCode}}

Wenn Sie diesen Code nicht angefordert haben, können Sie diese E-Mail sicher ignorieren.

Danke,
Ihr Ice Labs Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/el.html b/auth/email_link/translations/email/signin/el.html index d5c18593..3ad383f2 100644 --- a/auth/email_link/translations/email/signin/el.html +++ b/auth/email_link/translations/email/signin/el.html @@ -3,7 +3,7 @@ -->

Γεια σας,

-

Λάβαμε αίτημα σύνδεσης στην εφαρμογή μας χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας -email-, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

-

-conf_code-

+

Λάβαμε αίτημα σύνδεσης στην εφαρμογή μας χρησιμοποιώντας αυτή τη διεύθυνση email. Αν θέλετε να συνδεθείτε με τον λογαριασμό σας {{.Email}}, χρησιμοποιήστε αυτόν τον κωδικό επιβεβαίωσης:

+

{{.ConfirmationCode}}

Αν δεν ζητήσατε αυτόν τον κωδικό, μπορείτε να αγνοήσετε με ασφάλεια αυτό το email.

Ευχαριστούμε,
Η ομάδα Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/en.html b/auth/email_link/translations/email/signin/en.html index 0d0e2891..c09a9d9b 100644 --- a/auth/email_link/translations/email/signin/en.html +++ b/auth/email_link/translations/email/signin/en.html @@ -3,8 +3,8 @@ -->

Hi,

-

We received a request to sign in to our application using this email address. If you want to sign in with your -email- account, use this confirmation code:

-

-conf_code-

+

We received a request to sign in to our application using this email address. If you want to sign in with your {{.Email}} account, use this confirmation code:

+

{{.ConfirmationCode}}

If you did not request this code, you can safely ignore this email.

Thanks,
Ice Labs Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/es.html b/auth/email_link/translations/email/signin/es.html index f8ab8ddb..702389e8 100644 --- a/auth/email_link/translations/email/signin/es.html +++ b/auth/email_link/translations/email/signin/es.html @@ -3,7 +3,7 @@ -->

Hola,

-

Hemos recibido una solicitud para iniciar sesión en nuestra aplicación utilizando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta -email-, usa este código de confirmación:

-

-conf_code-

+

Hemos recibido una solicitud para iniciar sesión en nuestra aplicación utilizando esta dirección de correo electrónico. Si deseas iniciar sesión con tu cuenta {{.Email}}, usa este código de confirmación:

+

{{.ConfirmationCode}}

Si no solicitaste este código, puedes ignorar este correo electrónico de forma segura.

Gracias,
Equipo de Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/fa.html b/auth/email_link/translations/email/signin/fa.html index 0b317b20..048ff277 100644 --- a/auth/email_link/translations/email/signin/fa.html +++ b/auth/email_link/translations/email/signin/fa.html @@ -3,7 +3,7 @@ -->

سلام،

-

ما یک درخواست برای ورود به برنامه‌مان با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب -email- خود وارد شوید، از این کد تأیید استفاده کنید:

-

-conf_code-

+

ما یک درخواست برای ورود به برنامه‌مان با استفاده از این آدرس ایمیل دریافت کردیم. اگر می‌خواهید با حساب {{.Email}} خود وارد شوید، از این کد تأیید استفاده کنید:

+

{{.ConfirmationCode}}

اگر این کد را درخواست نکردید، می‌توانید این ایمیل را نادیده بگیرید.

با تشکر،
تیم Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/fr.html b/auth/email_link/translations/email/signin/fr.html index 3322f3a1..3e61fae8 100644 --- a/auth/email_link/translations/email/signin/fr.html +++ b/auth/email_link/translations/email/signin/fr.html @@ -3,7 +3,7 @@ -->

Bonjour,

-

Nous avons reçu une demande de connexion à notre application en utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte -email-, utilisez ce code de confirmation:

-

-conf_code-

+

Nous avons reçu une demande de connexion à notre application en utilisant cette adresse e-mail. Si vous souhaitez vous connecter avec votre compte {{.Email}}, utilisez ce code de confirmation:

+

{{.ConfirmationCode}}

Si vous n'avez pas demandé ce code, vous pouvez ignorer cet e-mail en toute sécurité.

Merci,
L'équipe Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/gu.html b/auth/email_link/translations/email/signin/gu.html index b6aa76ae..75cabbf1 100644 --- a/auth/email_link/translations/email/signin/gu.html +++ b/auth/email_link/translations/email/signin/gu.html @@ -3,7 +3,7 @@ -->

હાય,

-

આ ઇમેઇલ સરનામાનો ઉપયોગ કરીને અમારું એપ્લિકેશનમાં સાઇન ઇન કરવા માટેની વિનંતી પ્રાપ્ત થઈ. જો તમે તમારી -email- ખાતા સાથે સાઇન ઇન કરવા માંગો છો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

-

-conf_code-

+

આ ઇમેઇલ સરનામાનો ઉપયોગ કરીને અમારું એપ્લિકેશનમાં સાઇન ઇન કરવા માટેની વિનંતી પ્રાપ્ત થઈ. જો તમે તમારી {{.Email}} ખાતા સાથે સાઇન ઇન કરવા માંગો છો, તો આ પુષ્ટિકરણ કોડનો ઉપયોગ કરો:

+

{{.ConfirmationCode}}

જો તમે આ કોડનું વિનંતી નથી કરી, તો તમે આ ઇમેઇલને સુરક્ષિત રીતે અવગણિત કરી શકો છો.

આભાર,
Ice Labs ટીમ

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/he.html b/auth/email_link/translations/email/signin/he.html index ab0ae7ec..8e483e50 100644 --- a/auth/email_link/translations/email/signin/he.html +++ b/auth/email_link/translations/email/signin/he.html @@ -3,7 +3,7 @@ -->

שלום,

-

קיבלנו בקשה להיכנס לאפליקציה שלנו באמצעות כתובת האימייל הזו. אם ברצונך להיכנס עם חשבון -email-, השתמש בקוד האישור הזה:

-

-conf_code-

+

קיבלנו בקשה להיכנס לאפליקציה שלנו באמצעות כתובת האימייל הזו. אם ברצונך להיכנס עם חשבון {{.Email}}, השתמש בקוד האישור הזה:

+

{{.ConfirmationCode}}

אם לא ביקשת קוד זה, תוכל להתעלם מהאימייל הזה בבטחה.

תודה,
צוות Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/hi.html b/auth/email_link/translations/email/signin/hi.html index 7fd38927..f3e97f5e 100644 --- a/auth/email_link/translations/email/signin/hi.html +++ b/auth/email_link/translations/email/signin/hi.html @@ -3,7 +3,7 @@ -->

नमस्ते,

-

हमें इस ईमेल पते का उपयोग करके हमारे एप्लिकेशन में साइन इन करने के लिए एक अनुरोध प्राप्त हुआ है। यदि आप अपने -email- खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

-

-conf_code-

+

हमें इस ईमेल पते का उपयोग करके हमारे एप्लिकेशन में साइन इन करने के लिए एक अनुरोध प्राप्त हुआ है। यदि आप अपने {{.Email}} खाते के साथ साइन इन करना चाहते हैं, तो इस पुष्टि कोड का उपयोग करें:

+

{{.ConfirmationCode}}

यदि आपने इस कोड का अनुरोध नहीं किया है, तो आप इस ईमेल को सुरक्षित रूप से अनदेखा कर सकते हैं।

धन्यवाद,
Ice Labs टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/hu.html b/auth/email_link/translations/email/signin/hu.html index 0d0ff3aa..f1019051 100644 --- a/auth/email_link/translations/email/signin/hu.html +++ b/auth/email_link/translations/email/signin/hu.html @@ -3,7 +3,7 @@ -->

Szia,

-

Kaptunk egy kérést, hogy jelentkezzen be az alkalmazásunkba ezzel az e-mail címmel. Ha a -email- fiókkal szeretne bejelentkezni, használja ezt a megerősítő kódot:

-

-conf_code-

+

Kaptunk egy kérést, hogy jelentkezzen be az alkalmazásunkba ezzel az e-mail címmel. Ha a {{.Email}} fiókkal szeretne bejelentkezni, használja ezt a megerősítő kódot:

+

{{.ConfirmationCode}}

Ha nem kérte ezt a kódot, akkor ezt az e-mailt figyelmen kívül hagyhatja.

Köszönöm,
Ice Labs csapat

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/id.html b/auth/email_link/translations/email/signin/id.html index 7321eaf4..c8cc39f4 100644 --- a/auth/email_link/translations/email/signin/id.html +++ b/auth/email_link/translations/email/signin/id.html @@ -3,7 +3,7 @@ -->

Hai,

-

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika Anda ingin masuk dengan akun -email-, gunakan kode konfirmasi ini:

-

-conf_code-

+

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika Anda ingin masuk dengan akun {{.Email}}, gunakan kode konfirmasi ini:

+

{{.ConfirmationCode}}

Jika Anda tidak meminta kode ini, Anda dapat mengabaikan email ini dengan aman.

Terima kasih,
Tim Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/it.html b/auth/email_link/translations/email/signin/it.html index 9af08a4b..4fa157e0 100644 --- a/auth/email_link/translations/email/signin/it.html +++ b/auth/email_link/translations/email/signin/it.html @@ -3,7 +3,7 @@ -->

Ciao,

-

Abbiamo ricevuto una richiesta di accesso alla nostra applicazione utilizzando questo indirizzo email. Se vuoi accedere con il tuo account -email-, usa questo codice di conferma:

-

-conf_code-

+

Abbiamo ricevuto una richiesta di accesso alla nostra applicazione utilizzando questo indirizzo email. Se vuoi accedere con il tuo account {{.Email}}, usa questo codice di conferma:

+

{{.ConfirmationCode}}

Se non hai richiesto questo codice, puoi ignorare questa email in sicurezza.

Grazie,
Il team di Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ja.html b/auth/email_link/translations/email/signin/ja.html index b0adf000..3ef59ca4 100644 --- a/auth/email_link/translations/email/signin/ja.html +++ b/auth/email_link/translations/email/signin/ja.html @@ -3,7 +3,7 @@ -->

こんにちは、

-

このメールアドレスを使用してアプリケーションにサインインするリクエストを受け取りました。 -email- アカウントでサインインする場合は、次の確認コードを使用してください:

-

-conf_code-

+

このメールアドレスを使用してアプリケーションにサインインするリクエストを受け取りました。 {{.Email}} アカウントでサインインする場合は、次の確認コードを使用してください:

+

{{.ConfirmationCode}}

このコードをリクエストしていない場合は、このメールを無視してください。

ありがとう、
Ice Labs チーム

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/jv.html b/auth/email_link/translations/email/signin/jv.html index 7d67cada..997d00e6 100644 --- a/auth/email_link/translations/email/signin/jv.html +++ b/auth/email_link/translations/email/signin/jv.html @@ -3,7 +3,7 @@ -->

Hai,

-

Kami nampi panyuwunan kanggo mlebu menyang aplikasi kita nggunakake alamat email iki. Yen sampeyan pengin mlebu nganggo akun -email-, gunakake kode konfirmasi iki:

-

-conf_code-

+

Kami nampi panyuwunan kanggo mlebu menyang aplikasi kita nggunakake alamat email iki. Yen sampeyan pengin mlebu nganggo akun {{.Email}}, gunakake kode konfirmasi iki:

+

{{.ConfirmationCode}}

Yen sampeyan ora njaluk kode iki, sampeyan bisa nglirwakake email iki kanthi aman.

Matur nuwun,
Tim Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/kn.html b/auth/email_link/translations/email/signin/kn.html index bf99da21..bcbd6c31 100644 --- a/auth/email_link/translations/email/signin/kn.html +++ b/auth/email_link/translations/email/signin/kn.html @@ -3,7 +3,7 @@ -->

ನಮಸ್ಕಾರ,

-

ನಾವು ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿಕೊಂಡು ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ -email- ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

-

-conf_code-

+

ನಾವು ಈ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬಳಸಿಕೊಂಡು ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸಿದ್ದೇವೆ. ನೀವು ನಿಮ್ಮ {{.Email}} ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಈ ದೃಢೀಕರಣ ಕೋಡ್ ಬಳಸಿ:

+

{{.ConfirmationCode}}

ನೀವು ಈ ಕೋಡ್ ಅನ್ನು ವಿನಂತಿಸದಿದ್ದರೆ, ನೀವು ಈ ಇಮೇಲ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ನಿರ್ಲಕ್ಷಿಸಬಹುದು.

ಧನ್ಯವಾದಗಳು,
Ice Labs ತಂಡ

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ko.html b/auth/email_link/translations/email/signin/ko.html index 478c86de..6d804782 100644 --- a/auth/email_link/translations/email/signin/ko.html +++ b/auth/email_link/translations/email/signin/ko.html @@ -3,7 +3,7 @@ -->

안녕하세요,

-

이 이메일 주소를 사용하여 애플리케이션에 로그인하려는 요청을 받았습니다. -email- 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

-

-conf_code-

+

이 이메일 주소를 사용하여 애플리케이션에 로그인하려는 요청을 받았습니다. {{.Email}} 계정으로 로그인하려면 이 확인 코드를 사용하십시오:

+

{{.ConfirmationCode}}

이 코드를 요청하지 않은 경우 이 이메일을 무시해도 됩니다.

감사합니다,
Ice Labs 팀

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/mr.html b/auth/email_link/translations/email/signin/mr.html index ffe90219..836d88c5 100644 --- a/auth/email_link/translations/email/signin/mr.html +++ b/auth/email_link/translations/email/signin/mr.html @@ -3,7 +3,7 @@ -->

हाय,

-

आम्हाला या ईमेल पत्त्याचा वापर करून आमच्या अनुप्रयोगात साइन इन करण्यासाठी विनंती प्राप्त झाली आहे. जर तुम्हाला तुमच्या -email- खात्यासह साइन इन करायचे असेल, तर हा पुष्टीकरण कोड वापरा:

-

-conf_code-

+

आम्हाला या ईमेल पत्त्याचा वापर करून आमच्या अनुप्रयोगात साइन इन करण्यासाठी विनंती प्राप्त झाली आहे. जर तुम्हाला तुमच्या {{.Email}} खात्यासह साइन इन करायचे असेल, तर हा पुष्टीकरण कोड वापरा:

+

{{.ConfirmationCode}}

जर तुम्ही हा कोड विनंती केला नसेल, तर तुम्ही हा ईमेल सुरक्षितपणे दुर्लक्ष करू शकता.

धन्यवाद,
Ice Labs टीम

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ms.html b/auth/email_link/translations/email/signin/ms.html index ce7594ee..393dc894 100644 --- a/auth/email_link/translations/email/signin/ms.html +++ b/auth/email_link/translations/email/signin/ms.html @@ -3,7 +3,7 @@ -->

Hai,

-

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika anda ingin masuk dengan akaun -email-, gunakan kod pengesahan ini:

-

-conf_code-

+

Kami menerima permintaan untuk masuk ke aplikasi kami menggunakan alamat email ini. Jika anda ingin masuk dengan akaun {{.Email}}, gunakan kod pengesahan ini:

+

{{.ConfirmationCode}}

Jika anda tidak meminta kod ini, anda boleh mengabaikan email ini dengan selamat.

Terima kasih,
Pasukan Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/nb.html b/auth/email_link/translations/email/signin/nb.html index 60707ec8..f9d79eb8 100644 --- a/auth/email_link/translations/email/signin/nb.html +++ b/auth/email_link/translations/email/signin/nb.html @@ -3,7 +3,7 @@ -->

Hei,

-

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

-

-conf_code-

+

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

+

{{.ConfirmationCode}}

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,
Ice Labs-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/nn.html b/auth/email_link/translations/email/signin/nn.html index 60707ec8..f9d79eb8 100644 --- a/auth/email_link/translations/email/signin/nn.html +++ b/auth/email_link/translations/email/signin/nn.html @@ -3,7 +3,7 @@ -->

Hei,

-

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din -email--konto, bruk denne bekreftelseskoden:

-

-conf_code-

+

Vi mottok en forespørsel om å logge inn på applikasjonen vår med denne e-postadressen. Hvis du vil logge inn med din {{.Email}}-konto, bruk denne bekreftelseskoden:

+

{{.ConfirmationCode}}

Hvis du ikke har bedt om denne koden, kan du trygt ignorere denne e-posten.

Takk,
Ice Labs-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/pa-in.html b/auth/email_link/translations/email/signin/pa-in.html index 802b8920..240e714a 100644 --- a/auth/email_link/translations/email/signin/pa-in.html +++ b/auth/email_link/translations/email/signin/pa-in.html @@ -3,7 +3,7 @@ -->

ਹੈਲੋ,

-

ਅਸੀਂ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਇਸ ਈਮੇਲ ਪਤੇ ਨੂੰ ਵਰਤ ਕੇ ਸਾਇਨ ਇਨ ਕਰਨ ਲਈ ਇੱਕ ਬੇਨਤੀ ਪ੍ਰਾਪਤ ਕੀਤੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ -email- ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦਾ ਉਪਯੋਗ ਕਰੋ:

-

-conf_code-

+

ਅਸੀਂ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਇਸ ਈਮੇਲ ਪਤੇ ਨੂੰ ਵਰਤ ਕੇ ਸਾਇਨ ਇਨ ਕਰਨ ਲਈ ਇੱਕ ਬੇਨਤੀ ਪ੍ਰਾਪਤ ਕੀਤੀ ਹੈ। ਜੇ ਤੁਸੀਂ ਆਪਣੇ {{.Email}} ਖਾਤੇ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸ ਪੁਸ਼ਟੀਕਰਨ ਕੋਡ ਦਾ ਉਪਯੋਗ ਕਰੋ:

+

{{.ConfirmationCode}}

ਜੇ ਤੁਸੀਂ ਇਸ ਕੋਡ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਈਮੇਲ ਨੂੰ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਅਣਦੇਖਾ ਕਰ ਸਕਦੇ ਹੋ।

ਧੰਨਵਾਦ,
Ice Labs ਟੀਮ

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/pl.html b/auth/email_link/translations/email/signin/pl.html index 22727c25..c8f82b7c 100644 --- a/auth/email_link/translations/email/signin/pl.html +++ b/auth/email_link/translations/email/signin/pl.html @@ -3,7 +3,7 @@ -->

Witaj,

-

Otrzymaliśmy prośbę o zalogowanie się do naszej aplikacji przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się na swoje konto -email-, użyj tego kodu potwierdzającego:

-

-conf_code-

+

Otrzymaliśmy prośbę o zalogowanie się do naszej aplikacji przy użyciu tego adresu e-mail. Jeśli chcesz zalogować się na swoje konto {{.Email}}, użyj tego kodu potwierdzającego:

+

{{.ConfirmationCode}}

Jeśli nie żądałeś tego kodu, możesz bezpiecznie zignorować tę wiadomość e-mail.

Dziękujemy,
Zespół Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ps.html b/auth/email_link/translations/email/signin/ps.html index 1405cb2d..07d80f0a 100644 --- a/auth/email_link/translations/email/signin/ps.html +++ b/auth/email_link/translations/email/signin/ps.html @@ -3,7 +3,7 @@ -->

سلام،

-

موږ غوښتنه ترلاسه کړه چې زموږ په غوښتنلیک کې د ننوتلو لپاره دا بریښنالیک پته وکاروئ. که تاسو غواړئ د خپل -email- حساب سره ننوتل، دا د تایید کود وکاروئ:

-

-conf_code-

+

موږ غوښتنه ترلاسه کړه چې زموږ په غوښتنلیک کې د ننوتلو لپاره دا بریښنالیک پته وکاروئ. که تاسو غواړئ د خپل {{.Email}} حساب سره ننوتل، دا د تایید کود وکاروئ:

+

{{.ConfirmationCode}}

که تاسو دا کود غوښتنه نه وي کړې، تاسو کولی شئ دا بریښنالیک په خوندي ډول له پامه غورځوئ.

مننه،
د Ice Labs ټیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/pt.html b/auth/email_link/translations/email/signin/pt.html index 1c4cc82a..cee7cd95 100644 --- a/auth/email_link/translations/email/signin/pt.html +++ b/auth/email_link/translations/email/signin/pt.html @@ -3,7 +3,7 @@ -->

Olá,

-

Recebemos um pedido para entrar em nosso aplicativo usando este endereço de email. Se você deseja entrar com sua conta -email-, use este código de confirmação:

-

-conf_code-

+

Recebemos um pedido para entrar em nosso aplicativo usando este endereço de email. Se você deseja entrar com sua conta {{.Email}}, use este código de confirmação:

+

{{.ConfirmationCode}}

Se você não solicitou este código, pode ignorar este email com segurança.

Obrigado,
Equipe Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ro.html b/auth/email_link/translations/email/signin/ro.html index 5d3ae0ab..c34b407c 100644 --- a/auth/email_link/translations/email/signin/ro.html +++ b/auth/email_link/translations/email/signin/ro.html @@ -3,7 +3,7 @@ -->

Bună,

-

Am primit o cerere de conectare la aplicația noastră folosind această adresă de email. Dacă doriți să vă conectați cu contul -email-, utilizați acest cod de confirmare:

-

-conf_code-

+

Am primit o cerere de conectare la aplicația noastră folosind această adresă de email. Dacă doriți să vă conectați cu contul {{.Email}}, utilizați acest cod de confirmare:

+

{{.ConfirmationCode}}

Dacă nu ați solicitat acest cod, puteți ignora în siguranță acest email.

Mulțumim,
Echipa Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ru.html b/auth/email_link/translations/email/signin/ru.html index e73762c7..147ee387 100644 --- a/auth/email_link/translations/email/signin/ru.html +++ b/auth/email_link/translations/email/signin/ru.html @@ -3,7 +3,7 @@ -->

Привет,

-

Мы получили запрос на вход в наше приложение, используя этот адрес электронной почты. Если вы хотите войти с помощью своей учетной записи -email-, используйте этот код подтверждения:

-

-conf_code-

+

Мы получили запрос на вход в наше приложение, используя этот адрес электронной почты. Если вы хотите войти с помощью своей учетной записи {{.Email}}, используйте этот код подтверждения:

+

{{.ConfirmationCode}}

Если вы не запрашивали этот код, вы можете безопасно проигнорировать это письмо.

Спасибо,
Команда Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sd.html b/auth/email_link/translations/email/signin/sd.html index f77842fa..355820c9 100644 --- a/auth/email_link/translations/email/signin/sd.html +++ b/auth/email_link/translations/email/signin/sd.html @@ -3,7 +3,7 @@ -->

هيلو،

-

اسان کي هن اي ميل پتي کي استعمال ڪندي اسان جي درخواست تي سائن ان ڪرڻ جي درخواست ملي. جيڪڏھن توھان پنھنجي -email- کاتي سان سائن ان ڪرڻ چاھيو ٿا، ته ھن تصديق ڪوڊ کي استعمال ڪريو:

-

-conf_code-

+

اسان کي هن اي ميل پتي کي استعمال ڪندي اسان جي درخواست تي سائن ان ڪرڻ جي درخواست ملي. جيڪڏھن توھان پنھنجي {{.Email}} کاتي سان سائن ان ڪرڻ چاھيو ٿا، ته ھن تصديق ڪوڊ کي استعمال ڪريو:

+

{{.ConfirmationCode}}

جيڪڏهن توهان هن ڪوڊ کي درخواست نه ڪئي آهي، توهان هن اي ميل کي محفوظ طور تي نظرانداز ڪري سگهو ٿا.

مهرباني،
Ice Labs ٽيم

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sk.html b/auth/email_link/translations/email/signin/sk.html index f48c40df..c2ad2951 100644 --- a/auth/email_link/translations/email/signin/sk.html +++ b/auth/email_link/translations/email/signin/sk.html @@ -3,7 +3,7 @@ -->

Ahoj,

-

Obdržali sme žiadosť o prihlásenie do našej aplikácie pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou svojho účtu -email-, použite tento potvrdzovací kód:

-

-conf_code-

+

Obdržali sme žiadosť o prihlásenie do našej aplikácie pomocou tejto e-mailovej adresy. Ak sa chcete prihlásiť pomocou svojho účtu {{.Email}}, použite tento potvrdzovací kód:

+

{{.ConfirmationCode}}

Ak ste tento kód nežiadali, môžete tento e-mail bezpečne ignorovať.

Ďakujeme,
Tím Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sl.html b/auth/email_link/translations/email/signin/sl.html index 0e4f2089..f50112bb 100644 --- a/auth/email_link/translations/email/signin/sl.html +++ b/auth/email_link/translations/email/signin/sl.html @@ -3,7 +3,7 @@ -->

Zdravo,

-

Prejeli smo zahtevo za prijavo v našo aplikacijo s tem e-poštnim naslovom. Če želite prijaviti z vašim računom -email-, uporabite to potrditveno kodo:

-

-conf_code-

+

Prejeli smo zahtevo za prijavo v našo aplikacijo s tem e-poštnim naslovom. Če želite prijaviti z vašim računom {{.Email}}, uporabite to potrditveno kodo:

+

{{.ConfirmationCode}}

Če te kode niste zahtevali, lahko to e-pošto varno prezrete.

Hvala,
Ekipa Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sq.html b/auth/email_link/translations/email/signin/sq.html index 7a7567fe..42fb8cf7 100644 --- a/auth/email_link/translations/email/signin/sq.html +++ b/auth/email_link/translations/email/signin/sq.html @@ -3,7 +3,7 @@ -->

Përshëndetje,

-

Ne morëm një kërkesë për të hyrë në aplikacionin tonë duke përdorur këtë adresë emaili. Nëse dëshironi të hyni me llogarinë tuaj -email-, përdorni këtë kod konfirmimi:

-

-conf_code-

+

Ne morëm një kërkesë për të hyrë në aplikacionin tonë duke përdorur këtë adresë emaili. Nëse dëshironi të hyni me llogarinë tuaj {{.Email}}, përdorni këtë kod konfirmimi:

+

{{.ConfirmationCode}}

Nëse nuk e keni kërkuar këtë kod, mund ta injoroni këtë email në mënyrë të sigurt.

Faleminderit,
Ekipi Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/su.html b/auth/email_link/translations/email/signin/su.html index cacc50ec..8868d7fe 100644 --- a/auth/email_link/translations/email/signin/su.html +++ b/auth/email_link/translations/email/signin/su.html @@ -3,7 +3,7 @@ -->

Hai,

-

Urang nampi paménta pikeun asup kana aplikasi kami nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun -email-, anggo kode konfirmasi ieu:

-

-conf_code-

+

Urang nampi paménta pikeun asup kana aplikasi kami nganggo alamat email ieu. Upami anjeun hoyong asup nganggo akun {{.Email}}, anggo kode konfirmasi ieu:

+

{{.ConfirmationCode}}

Upami anjeun henteu nyungkeun kode ieu, anjeun tiasa ngahémat email ieu kalayan aman.

Hatur nuhun,
Tim Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/sv.html b/auth/email_link/translations/email/signin/sv.html index b5ddf0bd..bb34718c 100644 --- a/auth/email_link/translations/email/signin/sv.html +++ b/auth/email_link/translations/email/signin/sv.html @@ -3,7 +3,7 @@ -->

Hej,

-

Vi har mottagit en begäran om att logga in på vår applikation med denna e-postadress. Om du vill logga in med ditt -email--konto, använd denna bekräftelsekod:

-

-conf_code-

+

Vi har mottagit en begäran om att logga in på vår applikation med denna e-postadress. Om du vill logga in med ditt {{.Email}}-konto, använd denna bekräftelsekod:

+

{{.ConfirmationCode}}

Om du inte har begärt denna kod kan du säkert ignorera detta e-postmeddelande.

Tack,
Ice Labs-teamet

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ta.html b/auth/email_link/translations/email/signin/ta.html index fd4427e4..bd7d4067 100644 --- a/auth/email_link/translations/email/signin/ta.html +++ b/auth/email_link/translations/email/signin/ta.html @@ -3,7 +3,7 @@ -->

வணக்கம்,

-

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி எங்கள் பயன்பாட்டில் உள்நுழையக் கோரிக்கை கிடைத்தது. நீங்கள் உங்கள் -email- கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்படுத்தல் குறியீட்டை பயன்படுத்தவும்:

-

-conf_code-

+

இந்த மின்னஞ்சல் முகவரியைப் பயன்படுத்தி எங்கள் பயன்பாட்டில் உள்நுழையக் கோரிக்கை கிடைத்தது. நீங்கள் உங்கள் {{.Email}} கணக்குடன் உள்நுழைய விரும்பினால், இந்த உறுதிப்படுத்தல் குறியீட்டை பயன்படுத்தவும்:

+

{{.ConfirmationCode}}

நீங்கள் இந்தக் குறியீட்டை கோரவில்லை என்றால், இந்த மின்னஞ்சலைப் பாதுகாப்பாக புறக்கணிக்கலாம்.

நன்றி,
Ice Labs குழு

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/te.html b/auth/email_link/translations/email/signin/te.html index 3936e260..fc5ff73d 100644 --- a/auth/email_link/translations/email/signin/te.html +++ b/auth/email_link/translations/email/signin/te.html @@ -3,7 +3,7 @@ -->

హలో,

-

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి మా అప్లికేషన్‌లో సైన్ ఇన్ చేయడానికి మాకు ఒక అభ్యర్థన వచ్చింది. మీరు మీ -email- ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ని ఉపయోగించండి:

-

-conf_code-

+

ఈ ఇమెయిల్ చిరునామాను ఉపయోగించి మా అప్లికేషన్‌లో సైన్ ఇన్ చేయడానికి మాకు ఒక అభ్యర్థన వచ్చింది. మీరు మీ {{.Email}} ఖాతాతో సైన్ ఇన్ చేయాలనుకుంటే, ఈ నిర్ధారణ కోడ్‌ని ఉపయోగించండి:

+

{{.ConfirmationCode}}

మీరు ఈ కోడ్‌ను అభ్యర్థించకపోతే, మీరు ఈ ఇమెయిల్‌ను సురక్షితంగా నిర్లక్ష్యం చేయవచ్చు.

ధన్యవాదాలు,
Ice Labs బృందం

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/th.html b/auth/email_link/translations/email/signin/th.html index 1d8683ee..eadc7f11 100644 --- a/auth/email_link/translations/email/signin/th.html +++ b/auth/email_link/translations/email/signin/th.html @@ -3,7 +3,7 @@ -->

สวัสดี,

-

เราได้รับคำขอลงชื่อเข้าใช้แอปพลิเคชันของเราด้วยที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี -email- ของคุณ ให้ใช้รหัสยืนยันนี้:

-

-conf_code-

+

เราได้รับคำขอลงชื่อเข้าใช้แอปพลิเคชันของเราด้วยที่อยู่อีเมลนี้ หากคุณต้องการลงชื่อเข้าใช้ด้วยบัญชี {{.Email}} ของคุณ ให้ใช้รหัสยืนยันนี้:

+

{{.ConfirmationCode}}

หากคุณไม่ได้ร้องขอรหัสนี้ คุณสามารถเพิกเฉยต่ออีเมลนี้ได้อย่างปลอดภัย

ขอบคุณ,
ทีม Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/tl-ph.html b/auth/email_link/translations/email/signin/tl-ph.html index 1c2eafe5..3ecbae64 100644 --- a/auth/email_link/translations/email/signin/tl-ph.html +++ b/auth/email_link/translations/email/signin/tl-ph.html @@ -3,7 +3,7 @@ -->

Kumusta,

-

Nakatanggap kami ng kahilingan upang mag-sign in sa aming application gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong -email- account, gamitin ang kumpirmasyon code na ito:

-

-conf_code-

+

Nakatanggap kami ng kahilingan upang mag-sign in sa aming application gamit ang email address na ito. Kung nais mong mag-sign in gamit ang iyong {{.Email}} account, gamitin ang kumpirmasyon code na ito:

+

{{.ConfirmationCode}}

Kung hindi mo hiningi ang code na ito, maaari mong balewalain nang ligtas ang email na ito.

Salamat,
Ice Labs Team

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/tr.html b/auth/email_link/translations/email/signin/tr.html index b63eade4..88097085 100644 --- a/auth/email_link/translations/email/signin/tr.html +++ b/auth/email_link/translations/email/signin/tr.html @@ -3,7 +3,7 @@ -->

Merhaba,

-

Bu e-posta adresini kullanarak uygulamamıza giriş yapmak için bir istek aldık. -email- hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

-

-conf_code-

+

Bu e-posta adresini kullanarak uygulamamıza giriş yapmak için bir istek aldık. {{.Email}} hesabınızla giriş yapmak istiyorsanız, bu onay kodunu kullanın:

+

{{.ConfirmationCode}}

Bu kodu talep etmediyseniz, bu e-postayı görmezden gelebilirsiniz.

Teşekkürler,
Ice Labs Ekibi

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/uk.html b/auth/email_link/translations/email/signin/uk.html index c921d68d..3658cd23 100644 --- a/auth/email_link/translations/email/signin/uk.html +++ b/auth/email_link/translations/email/signin/uk.html @@ -3,7 +3,7 @@ -->

Привіт,

-

Ми отримали запит на вхід до нашої програми за цією адресою електронної пошти. Якщо ви хочете ввійти з вашим обліковим записом -email-, використовуйте цей код підтвердження:

-

-conf_code-

+

Ми отримали запит на вхід до нашої програми за цією адресою електронної пошти. Якщо ви хочете ввійти з вашим обліковим записом {{.Email}}, використовуйте цей код підтвердження:

+

{{.ConfirmationCode}}

Якщо ви не запитували цей код, ви можете безпечно проігнорувати цей електронний лист.

Дякуємо,
Команда Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/ur.html b/auth/email_link/translations/email/signin/ur.html index d8ac10e8..c454ec85 100644 --- a/auth/email_link/translations/email/signin/ur.html +++ b/auth/email_link/translations/email/signin/ur.html @@ -3,7 +3,7 @@ -->

ہیلو،

-

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے اپنے ایپلیکیشن میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے -email- اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو اس تصدیقی کوڈ کا استعمال کریں:

-

-conf_code-

+

ہمیں اس ای میل ایڈریس کا استعمال کرتے ہوئے اپنے ایپلیکیشن میں سائن ان کرنے کی درخواست موصول ہوئی ہے۔ اگر آپ اپنے {{.Email}} اکاؤنٹ کے ساتھ سائن ان کرنا چاہتے ہیں تو اس تصدیقی کوڈ کا استعمال کریں:

+

{{.ConfirmationCode}}

اگر آپ نے اس کوڈ کی درخواست نہیں کی ہے، تو آپ اس ای میل کو محفوظ طریقے سے نظر انداز کر سکتے ہیں۔

شکریہ،
Ice Labs ٹیم

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/vi.html b/auth/email_link/translations/email/signin/vi.html index 58191431..3e29e721 100644 --- a/auth/email_link/translations/email/signin/vi.html +++ b/auth/email_link/translations/email/signin/vi.html @@ -3,7 +3,7 @@ -->

Chào,

-

Chúng tôi đã nhận được yêu cầu đăng nhập vào ứng dụng của chúng tôi bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản -email-, hãy sử dụng mã xác nhận này:

-

-conf_code-

+

Chúng tôi đã nhận được yêu cầu đăng nhập vào ứng dụng của chúng tôi bằng địa chỉ email này. Nếu bạn muốn đăng nhập bằng tài khoản {{.Email}}, hãy sử dụng mã xác nhận này:

+

{{.ConfirmationCode}}

Nếu bạn không yêu cầu mã này, bạn có thể bỏ qua email này một cách an toàn.

Cảm ơn,
Đội ngũ Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/yo.html b/auth/email_link/translations/email/signin/yo.html index 8d424f55..57324074 100644 --- a/auth/email_link/translations/email/signin/yo.html +++ b/auth/email_link/translations/email/signin/yo.html @@ -3,7 +3,7 @@ -->

Pẹlẹ o,

-

A gba ibeere kan lati wọle si ohun elo wa nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ -email- rẹ, lo koodu ìfàṣẹsí yi:

-

-conf_code-

+

A gba ibeere kan lati wọle si ohun elo wa nipa lilo adirẹsi imeeli yii. Ti o ba fẹ lati wọle pẹlu akọọlẹ {{.Email}} rẹ, lo koodu ìfàṣẹsí yi:

+

{{.ConfirmationCode}}

Ti o ko ba beere fun koodu yi, o le foju imeeli yi lai si ewu kankan.

O ṣeun,
Ẹgbẹ Ice Labs

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/zh-cn.html b/auth/email_link/translations/email/signin/zh-cn.html index b953f9d9..f956ac8d 100644 --- a/auth/email_link/translations/email/signin/zh-cn.html +++ b/auth/email_link/translations/email/signin/zh-cn.html @@ -3,7 +3,7 @@ -->

你好,

-

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 -email- 帐户登录,请使用此确认码:

-

-conf_code-

+

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 {{.Email}} 帐户登录,请使用此确认码:

+

{{.ConfirmationCode}}

如果您没有请求此代码,可以放心忽略此电子邮件。

谢谢,
Ice Labs团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/zh.html b/auth/email_link/translations/email/signin/zh.html index b953f9d9..f956ac8d 100644 --- a/auth/email_link/translations/email/signin/zh.html +++ b/auth/email_link/translations/email/signin/zh.html @@ -3,7 +3,7 @@ -->

你好,

-

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 -email- 帐户登录,请使用此确认码:

-

-conf_code-

+

我们收到了使用此电子邮件地址登录应用程序的请求。如果您想使用您的 {{.Email}} 帐户登录,请使用此确认码:

+

{{.ConfirmationCode}}

如果您没有请求此代码,可以放心忽略此电子邮件。

谢谢,
Ice Labs团队

\ No newline at end of file diff --git a/auth/email_link/translations/email/signin/zu.html b/auth/email_link/translations/email/signin/zu.html index b06c168c..b33f377e 100644 --- a/auth/email_link/translations/email/signin/zu.html +++ b/auth/email_link/translations/email/signin/zu.html @@ -3,7 +3,7 @@ -->

Sawubona,

-

Sithole isicelo sokungena kuhlelo lwethu sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho -email-, sebenzisa le khodi yokuqinisekisa:

-

-conf_code-

+

Sithole isicelo sokungena kuhlelo lwethu sisebenzisa leli kheli le-imeyili. Uma ufuna ukungena nge-akhawunti yakho {{.Email}}, sebenzisa le khodi yokuqinisekisa:

+

{{.ConfirmationCode}}

Uma ungacelanga le khodi, ungayicabangela le imeyili ngaphandle kokukhathazeka.

Siyabonga,
Iqembu le-Ice Labs

\ No newline at end of file diff --git a/cmd/eskimo-hut/eskimo_hut.go b/cmd/eskimo-hut/eskimo_hut.go index 5f532dce..461b96db 100644 --- a/cmd/eskimo-hut/eskimo_hut.go +++ b/cmd/eskimo-hut/eskimo_hut.go @@ -39,6 +39,7 @@ func main() { log.Panic("'api-key' is missing") } server.New(new(service), applicationYamlKey, swaggerRoot).ListenAndServe(ctx, cancel) + log.Info("111") } func (s *service) RegisterRoutes(router *server.Router) { @@ -51,7 +52,7 @@ func (s *service) RegisterRoutes(router *server.Router) { func (s *service) Init(ctx context.Context, cancel context.CancelFunc) { s.usersProcessor = users.StartProcessor(ctx, cancel) - s.authEmailLinkClient = emaillink.NewClient(ctx, s.usersProcessor, server.Auth(ctx)) + s.authEmailLinkClient = emaillink.NewClient(ctx, cancel, s.usersProcessor, server.Auth(ctx)) s.socialRepository = social.New(ctx, s.usersProcessor) s.quizRepository = kycquiz.NewRepository(ctx, s.usersProcessor) s.faceKycClient = facekyc.New(ctx, s.usersProcessor) @@ -65,7 +66,7 @@ func (s *service) Close(ctx context.Context) error { return multierror.Append( //nolint:wrapcheck // Not needed. errors.Wrap(s.quizRepository.Close(), "could not close quiz repository"), errors.Wrap(s.socialRepository.Close(), "could not close socialRepository"), - errors.Wrap(s.authEmailLinkClient.Close(ctx), "could not close authEmailLinkClient"), + errors.Wrap(s.authEmailLinkClient.Close(), "could not close authEmailLinkClient"), errors.Wrap(s.usersProcessor.Close(), "could not close usersProcessor"), errors.Wrap(s.faceKycClient.Close(), "could not close faceKycClient"), ).ErrorOrNil() diff --git a/cmd/eskimo/eskimo.go b/cmd/eskimo/eskimo.go index f98edff5..1ab4de94 100644 --- a/cmd/eskimo/eskimo.go +++ b/cmd/eskimo/eskimo.go @@ -51,7 +51,7 @@ func (s *service) Close(ctx context.Context) error { } return multierror.Append( //nolint:wrapcheck //. - errors.Wrapf(s.iceClient.Close(ctx), "could not close iceClient"), + errors.Wrapf(s.iceClient.Close(), "could not close iceClient"), errors.Wrapf(s.usersRepository.Close(), "could not close repository"), ).ErrorOrNil() } diff --git a/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go b/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go index 357ae15f..7916222b 100644 --- a/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go +++ b/cmd/scripts/merge_firebase_phone_login_with_ice_email_login/merge_firebase_phone_login_with_ice_email_login.go @@ -47,11 +47,11 @@ type ( func main() { usersProcessor := users.StartProcessor(context.Background(), func() {}) authClient := auth.New(context.Background(), applicationYamlAuthKey) - authEmailLinkClient := emaillink.NewClient(context.Background(), usersProcessor, authClient) + authEmailLinkClient := emaillink.NewClient(context.Background(), nil, usersProcessor, authClient) db := storage.MustConnect(context.Background(), ddl, applicationYamlEskimoKey) defer db.Close() defer usersProcessor.Close() - defer authEmailLinkClient.Close(context.Background()) + defer authEmailLinkClient.Close() offset := uint64(0) concurrencyGuard := make(chan struct{}, concurrencyCount) diff --git a/go.mod b/go.mod index 34b5a8da..970f1448 100644 --- a/go.mod +++ b/go.mod @@ -158,13 +158,13 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.8.0 // indirect golang.org/x/crypto v0.25.0 // indirect - golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect + golang.org/x/exp v0.0.0-20240707233637-46b078467d37 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.22.0 // indirect + golang.org/x/tools v0.23.0 // indirect google.golang.org/api v0.187.0 // indirect google.golang.org/appengine/v2 v2.0.6 // indirect google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect diff --git a/go.sum b/go.sum index 18d51a79..5d909916 100644 --- a/go.sum +++ b/go.sum @@ -13,8 +13,8 @@ cloud.google.com/go/iam v1.1.10 h1:ZSAr64oEhQSClwBL670MsJAW5/RLiC6kfw3Bqmd5ZDI= cloud.google.com/go/iam v1.1.10/go.mod h1:iEgMq62sg8zx446GCaijmA2Miwg5o3UbO+nI47WHJps= cloud.google.com/go/longrunning v0.5.9 h1:haH9pAuXdPAMqHvzX0zlWQigXT7B0+CL4/2nXXdBo5k= cloud.google.com/go/longrunning v0.5.9/go.mod h1:HD+0l9/OOW0za6UWdKJtXoFAX/BGg/3Wj8p10NeWF7c= -cloud.google.com/go/storage v1.42.0 h1:4QtGpplCVt1wz6g5o1ifXd656P5z+yNgzdw1tVfp0cU= -cloud.google.com/go/storage v1.42.0/go.mod h1:HjMXRFq65pGKFn6hxj6x3HCyR41uSB72Z0SO/Vn6JFQ= +cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= +cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= firebase.google.com/go/v4 v4.14.1 h1:4qiUETaFRWoFGE1XP5VbcEdtPX93Qs+8B/7KvP2825g= @@ -222,8 +222,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/ice-blockchain/go-tarantool-client v0.0.0-20230327200757-4fc71fa3f7bb h1:8TnFP3mc7O+tc44kv2e0/TpZKnEVUaKH+UstwfBwRkk= github.com/ice-blockchain/go-tarantool-client v0.0.0-20230327200757-4fc71fa3f7bb/go.mod h1:ZsQU7i3mxhgBBu43Oev7WPFbIjP4TniN/b1UPNGbrq8= -github.com/ice-blockchain/wintr v1.143.0 h1:KID/M01KN1jl7mlDF+VnIBScR7uT277mJtebYtemSF0= -github.com/ice-blockchain/wintr v1.143.0/go.mod h1:EBMC4stY8PL8ptIuoLwbh92LblNlOPNz/Ze+PlmsyyI= +github.com/ice-blockchain/wintr v1.144.0 h1:YQE0olkPdSI6AOlw7r/j5jGI6uLciZQrvXFIkN4C4l4= +github.com/ice-blockchain/wintr v1.144.0/go.mod h1:3HAl5nodsetqQN30q3gUvsxgfq2B7F86Os/II7/5GPQ= github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA= github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= github.com/ip2location/ip2location-go/v9 v9.7.0 h1:ipwl67HOWcrw+6GOChkEXcreRQR37NabqBd2ayYa4Q0= @@ -336,8 +336,8 @@ github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjC github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= github.com/redis/go-redis/v9 v9.5.3 h1:fOAp1/uJG+ZtcITgZOfYFmTKPE7n4Vclj1wZFgRciUU= github.com/redis/go-redis/v9 v9.5.3/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= -github.com/refraction-networking/utls v1.6.6 h1:igFsYBUJPYM8Rno9xUuDoM5GQrVEqY4llzEXOkL43Ig= -github.com/refraction-networking/utls v1.6.6/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= +github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= +github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= @@ -409,10 +409,10 @@ github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= @@ -436,11 +436,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp v0.0.0-20240707233637-46b078467d37 h1:uLDX+AfeFCct3a2C7uIWBKMJIR3CJMhcgfrUAqjRK6w= +golang.org/x/exp v0.0.0-20240707233637-46b078467d37/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -448,8 +448,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -464,8 +464,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -493,8 +493,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -519,14 +519,12 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.187.0 h1:Mxs7VATVC2v7CY+7Xwm4ndkX71hpElcvx0D1Ji/p1eo= google.golang.org/api v0.187.0/go.mod h1:KIHlTc4x7N7gKKuVsdmfBXN13yEEWXWFURWY6SBp2gk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= From ca3ff4d22e80ce1b050d412f497f3faf2e9fcb6c Mon Sep 17 00:00:00 2001 From: ice-cronus <105345303+ice-cronus@users.noreply.github.com> Date: Mon, 8 Jul 2024 10:55:59 +0300 Subject: [PATCH 3/5] fix licensing --- auth/email_link/.testdata/docker-compose.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/auth/email_link/.testdata/docker-compose.yaml b/auth/email_link/.testdata/docker-compose.yaml index c2cc1481..e9525650 100644 --- a/auth/email_link/.testdata/docker-compose.yaml +++ b/auth/email_link/.testdata/docker-compose.yaml @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: ice License 1.0 + version: '3.7' services: eskimo-dfly: From 872bcef1b4f2c8108101a679a2b03337fc49e093 Mon Sep 17 00:00:00 2001 From: ice-cronus <105345303+ice-cronus@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:28:56 +0300 Subject: [PATCH 4/5] swagger --- cmd/eskimo-hut/api/docs.go | 8 ++++++++ cmd/eskimo-hut/api/swagger.json | 8 ++++++++ cmd/eskimo-hut/api/swagger.yaml | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/cmd/eskimo-hut/api/docs.go b/cmd/eskimo-hut/api/docs.go index 86a04345..c1d3d605 100644 --- a/cmd/eskimo-hut/api/docs.go +++ b/cmd/eskimo-hut/api/docs.go @@ -2149,6 +2149,14 @@ const docTemplate = `{ "loginSession": { "type": "string", "example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE2ODQzMjQ0NTYsImV4cCI6MTcxNTg2MDQ1NiwiYXVkIjoiIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIm90cCI6IjUxMzRhMzdkLWIyMWEtNGVhNi1hNzk2LTAxOGIwMjMwMmFhMCJ9.q3xa8Gwg2FVCRHLZqkSedH3aK8XBqykaIy85rRU40nM" + }, + "positionInQueue": { + "type": "integer", + "example": 675 + }, + "rateLimit": { + "type": "string", + "example": "1000:24h" } } }, diff --git a/cmd/eskimo-hut/api/swagger.json b/cmd/eskimo-hut/api/swagger.json index aa58d723..b262d4d3 100644 --- a/cmd/eskimo-hut/api/swagger.json +++ b/cmd/eskimo-hut/api/swagger.json @@ -2142,6 +2142,14 @@ "loginSession": { "type": "string", "example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE2ODQzMjQ0NTYsImV4cCI6MTcxNTg2MDQ1NiwiYXVkIjoiIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIm90cCI6IjUxMzRhMzdkLWIyMWEtNGVhNi1hNzk2LTAxOGIwMjMwMmFhMCJ9.q3xa8Gwg2FVCRHLZqkSedH3aK8XBqykaIy85rRU40nM" + }, + "positionInQueue": { + "type": "integer", + "example": 675 + }, + "rateLimit": { + "type": "string", + "example": "1000:24h" } } }, diff --git a/cmd/eskimo-hut/api/swagger.yaml b/cmd/eskimo-hut/api/swagger.yaml index e174e5c4..f4fb3ef2 100644 --- a/cmd/eskimo-hut/api/swagger.yaml +++ b/cmd/eskimo-hut/api/swagger.yaml @@ -6,6 +6,12 @@ definitions: loginSession: example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE2ODQzMjQ0NTYsImV4cCI6MTcxNTg2MDQ1NiwiYXVkIjoiIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIm90cCI6IjUxMzRhMzdkLWIyMWEtNGVhNi1hNzk2LTAxOGIwMjMwMmFhMCJ9.q3xa8Gwg2FVCRHLZqkSedH3aK8XBqykaIy85rRU40nM type: string + positionInQueue: + example: 675 + type: integer + rateLimit: + example: 1000:24h + type: string type: object main.CreateUserRequestBody: properties: From aa07bcb2f021306437b7d415a4748de14f27c889 Mon Sep 17 00:00:00 2001 From: ice-cronus <105345303+ice-cronus@users.noreply.github.com> Date: Mon, 8 Jul 2024 12:25:44 +0300 Subject: [PATCH 5/5] fix db close --- auth/email_link/contract.go | 8 +++++--- auth/email_link/emaillink.go | 4 ++-- auth/email_link/queue.go | 2 ++ cmd/eskimo-hut/eskimo_hut.go | 1 - 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/auth/email_link/contract.go b/auth/email_link/contract.go index 318b8cbb..892e019c 100644 --- a/auth/email_link/contract.go +++ b/auth/email_link/contract.go @@ -7,6 +7,7 @@ import ( "embed" "io" "mime/multipart" + "sync" "text/template" stdlibtime "time" @@ -96,15 +97,16 @@ const ( type ( languageCode = string client struct { - db *storage.DB queueDB storagev3.DB + authClient auth.Client + userModifier UserModifier + db *storage.DB cfg *config shutdown func() error cancel context.CancelFunc - authClient auth.Client - userModifier UserModifier emailClients []email.Client fromRecipients []fromRecipient + queueWg sync.WaitGroup emailClientLBIndex uint64 } config struct { diff --git a/auth/email_link/emaillink.go b/auth/email_link/emaillink.go index a08bebaf..56a9ddf8 100644 --- a/auth/email_link/emaillink.go +++ b/auth/email_link/emaillink.go @@ -75,12 +75,12 @@ func NewROClient(ctx context.Context) IceUserIDClient { } func (c *client) Close() error { - retErr := errors.Wrap(c.shutdown(), "closing auth/emaillink repository failed") if c.cancel != nil { c.cancel() } + c.queueWg.Wait() - return retErr + return errors.Wrap(c.shutdown(), "closing auth/emaillink repository failed") } func (c *client) CheckHealth(ctx context.Context) error { diff --git a/auth/email_link/queue.go b/auth/email_link/queue.go index eff20fb4..70fa9215 100644 --- a/auth/email_link/queue.go +++ b/auth/email_link/queue.go @@ -81,8 +81,10 @@ func (c *client) processEmailQueue(rootCtx context.Context) { } } lockCancel() + c.queueWg.Add(1) defer func() { log.Error(errors.Wrapf(c.queueDB.Close(), "failed to close email queue db")) + c.queueWg.Done() }() for rootCtx.Err() == nil { now := time.Now() diff --git a/cmd/eskimo-hut/eskimo_hut.go b/cmd/eskimo-hut/eskimo_hut.go index 461b96db..2d69cdfd 100644 --- a/cmd/eskimo-hut/eskimo_hut.go +++ b/cmd/eskimo-hut/eskimo_hut.go @@ -39,7 +39,6 @@ func main() { log.Panic("'api-key' is missing") } server.New(new(service), applicationYamlKey, swaggerRoot).ListenAndServe(ctx, cancel) - log.Info("111") } func (s *service) RegisterRoutes(router *server.Router) {