reprogl

Форк
0
/
email.go 
80 строк · 1.7 Кб
1
package handlers
2

3
import (
4
	"errors"
5
	"net/http"
6

7
	"github.com/go-chi/chi/v5"
8
	"xelbot.com/reprogl/container"
9
	"xelbot.com/reprogl/models"
10
	"xelbot.com/reprogl/models/repositories"
11
	"xelbot.com/reprogl/session"
12
	"xelbot.com/reprogl/utils/hashid"
13
	"xelbot.com/reprogl/views"
14
)
15

16
const successUnsubscribe = "success.unsubscribe"
17

18
func EmailUnsubscribe(app *container.Application) http.HandlerFunc {
19
	return func(w http.ResponseWriter, r *http.Request) {
20
		hash := chi.URLParam(r, "hash")
21

22
		data, err := hashid.Decode(hash, false)
23
		if err != nil {
24
			app.NotFound(w)
25

26
			return
27
		}
28

29
		repo := repositories.EmailSubscriptionRepository{DB: app.DB}
30
		settings, err := repo.Find(data.ID)
31
		if err != nil {
32
			if errors.Is(err, models.RecordNotFound) {
33
				app.NotFound(w)
34
			} else {
35
				app.ServerError(w, err)
36
			}
37

38
			return
39
		}
40

41
		_, ok := session.Pop[string](r.Context(), successUnsubscribe)
42

43
		templateData := views.NewUnsubscribePageData(
44
			settings,
45
			models.AvatarLink(3, hashid.Male|hashid.User, 160),
46
			ok || settings.BlockSending,
47
		)
48
		err = views.WriteTemplate(w, "unsubscribe.gohtml", templateData)
49
		if err != nil {
50
			app.ServerError(w, err)
51

52
			return
53
		}
54
	}
55
}
56

57
func EmailUnsubscribePost(app *container.Application) http.HandlerFunc {
58
	return func(w http.ResponseWriter, r *http.Request) {
59
		hash := chi.URLParam(r, "hash")
60

61
		data, err := hashid.Decode(hash, false)
62
		if err != nil {
63
			app.NotFound(w)
64

65
			return
66
		}
67

68
		repo := repositories.EmailSubscriptionRepository{DB: app.DB}
69
		err = repo.Unsubscribe(data.ID)
70
		if err != nil {
71
			app.ServerError(w, err)
72

73
			return
74
		}
75

76
		session.Put(r.Context(), successUnsubscribe, "*")
77

78
		http.Redirect(w, r, r.URL.Path, http.StatusFound)
79
	}
80
}
81

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.