moira

Форк
0
/
global_settings.go 
52 строки · 1.7 Кб
1
package handler
2

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

7
	"github.com/go-chi/chi"
8
	"github.com/go-chi/render"
9

10
	"go.avito.ru/DO/moira/api"
11
	"go.avito.ru/DO/moira/api/controller"
12
	"go.avito.ru/DO/moira/api/dto"
13
	"go.avito.ru/DO/moira/api/middleware"
14
)
15

16
func globalSettings(router chi.Router) {
17
	router.Get("/", getGlobalSettings)
18
	router.Put("/", setGlobalSettings)
19
}
20

21
func checkPermissions(request *http.Request) *api.ErrorResponse {
22
	userName := middleware.GetLogin(request)
23
	isSuperUser := superUsers[userName]
24

25
	if !isSuperUser {
26
		errMessage := fmt.Sprintf("User \"%s\" is forbidden to request or modify global settings", userName)
27
		return api.ErrorForbidden(errMessage)
28
	} else {
29
		return nil
30
	}
31
}
32

33
func getGlobalSettings(writer http.ResponseWriter, request *http.Request) {
34
	if errResponse := checkPermissions(request); errResponse != nil {
35
		_ = render.Render(writer, request, errResponse)
36
	} else if globalSettings, errResponse := controller.GetGlobalSettings(database); errResponse != nil {
37
		_ = render.Render(writer, request, errResponse)
38
	} else if err := render.Render(writer, request, globalSettings); err != nil {
39
		_ = render.Render(writer, request, api.ErrorRender(err))
40
	}
41
}
42

43
func setGlobalSettings(writer http.ResponseWriter, request *http.Request) {
44
	newSettings := &dto.GlobalSettings{}
45
	if errResponse := checkPermissions(request); errResponse != nil {
46
		_ = render.Render(writer, request, errResponse)
47
	} else if err := render.Bind(request, newSettings); err != nil {
48
		_ = render.Render(writer, request, api.ErrorInternalServer(err))
49
	} else if errResponse := controller.SetGlobalSettings(database, newSettings); errResponse != nil {
50
		_ = render.Render(writer, request, errResponse)
51
	}
52
}
53

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

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

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

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