package users_service import ( "fmt" "html" "strings" ) const ( welcomeSubject = "Твой доступ к «Вечернему детективу»" resetSubject = "Новый пароль для «Вечернего детектива»" ) func welcomePlain(username, email, password, loginURL string) string { var b strings.Builder b.WriteString(greeting(username)) b.WriteString("\n\n") b.WriteString("Твоя регистрация в «Вечернем детективе» прошла. Данные для входа:\n\n") b.WriteString(" Логин: ") b.WriteString(email) b.WriteString("\n") b.WriteString(" Пароль: ") b.WriteString(password) b.WriteString("\n\n") if loginURL != "" { b.WriteString("Войти в игру: ") b.WriteString(loginURL) b.WriteString("\n\n") } b.WriteString("Если ты не регистрировался — просто проигнорируй это письмо.\n\n") b.WriteString("— Команда «Вечернего детектива»\n") b.WriteString("P.S. Сохрани это письмо: пароль понадобится для входа.") return sanitizeLine(b.String()) } func welcomeHTML(username, email, password, loginURL string) string { var content strings.Builder content.WriteString("

Привет, ") content.WriteString(html.EscapeString(username)) content.WriteString("!

\n") content.WriteString("

Твоя регистрация в «Вечернем детективе» прошла. Данные для входа:

\n") content.WriteString(credentialsBlockHTML(email, password)) if loginURL != "" { content.WriteString(buttonHTML(loginURL, "Войти в игру")) } content.WriteString("

Если ты не регистрировался — просто проигнорируй это письмо.

") return wrapHTML(content.String(), loginURL) } func resetPlain(username, email, password, loginURL string) string { var b strings.Builder b.WriteString(greeting(username)) b.WriteString("\n\n") b.WriteString("Ты запросил сброс пароля в «Вечернем детективе». Новый пароль для входа:\n\n") b.WriteString(" Логин: ") b.WriteString(email) b.WriteString("\n") b.WriteString(" Пароль: ") b.WriteString(password) b.WriteString("\n\n") if loginURL != "" { b.WriteString("Войти в игру: ") b.WriteString(loginURL) b.WriteString("\n\n") } b.WriteString("Никому не сообщай пароль и не пересылай это письмо.\n") b.WriteString("Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.\n\n") b.WriteString("— Команда «Вечернего детектива»\n") return sanitizeLine(b.String()) } func resetHTML(username, email, password, loginURL string) string { var content strings.Builder content.WriteString("

Привет, ") content.WriteString(html.EscapeString(username)) content.WriteString("!

\n") content.WriteString("

Ты запросил сброс пароля в «Вечернем детективе». Новый пароль для входа:

\n") content.WriteString(credentialsBlockHTML(email, password)) if loginURL != "" { content.WriteString(buttonHTML(loginURL, "Войти в игру")) } content.WriteString("

Никому не сообщай пароль и не пересылай это письмо.

\n") content.WriteString("

Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.

") return wrapHTML(content.String(), loginURL) } func greeting(username string) string { username = sanitizeLine(strings.TrimSpace(username)) if username == "" { return "Привет!" } return fmt.Sprintf("Привет, %s!", username) } func credentialsBlockHTML(email, password string) string { return `
` } func buttonHTML(link, label string) string { return `
` } func wrapHTML(content, baseURL string) string { return ` ` } func emailAssetURL(baseURL, filename string) string { if baseURL == "" { return "" } return html.EscapeString(strings.TrimRight(baseURL, "/") + "/email/" + filename) } func sanitizeLine(s string) string { return strings.NewReplacer("\r", "", "\n", "").Replace(s) } func loginURL(baseURL string) string { baseURL = strings.TrimSpace(baseURL) baseURL = strings.TrimRight(baseURL, "/") if baseURL == "" { return "" } if !strings.HasPrefix(baseURL, "http://") && !strings.HasPrefix(baseURL, "https://") { return "" } return baseURL }