1package dtos
2
3import (
4	"crypto/md5"
5	"fmt"
6	"regexp"
7	"strings"
8
9	"github.com/grafana/grafana/pkg/components/simplejson"
10	"github.com/grafana/grafana/pkg/infra/log"
11	"github.com/grafana/grafana/pkg/models"
12	"github.com/grafana/grafana/pkg/setting"
13)
14
15var regNonAlphaNumeric = regexp.MustCompile("[^a-zA-Z0-9]+")
16var mlog = log.New("models")
17
18type AnyId struct {
19	Id int64 `json:"id"`
20}
21
22type LoginCommand struct {
23	User     string `json:"user" binding:"Required"`
24	Password string `json:"password" binding:"Required"`
25	Remember bool   `json:"remember"`
26}
27
28type CurrentUser struct {
29	IsSignedIn                 bool               `json:"isSignedIn"`
30	Id                         int64              `json:"id"`
31	Login                      string             `json:"login"`
32	Email                      string             `json:"email"`
33	Name                       string             `json:"name"`
34	LightTheme                 bool               `json:"lightTheme"`
35	OrgCount                   int                `json:"orgCount"`
36	OrgId                      int64              `json:"orgId"`
37	OrgName                    string             `json:"orgName"`
38	OrgRole                    models.RoleType    `json:"orgRole"`
39	IsGrafanaAdmin             bool               `json:"isGrafanaAdmin"`
40	GravatarUrl                string             `json:"gravatarUrl"`
41	Timezone                   string             `json:"timezone"`
42	WeekStart                  string             `json:"weekStart"`
43	Locale                     string             `json:"locale"`
44	HelpFlags1                 models.HelpFlags1  `json:"helpFlags1"`
45	HasEditPermissionInFolders bool               `json:"hasEditPermissionInFolders"`
46	Permissions                UserPermissionsMap `json:"permissions,omitempty"`
47}
48
49type UserPermissionsMap map[string]bool
50
51type MetricRequest struct {
52	From    string             `json:"from"`
53	To      string             `json:"to"`
54	Queries []*simplejson.Json `json:"queries"`
55	Debug   bool               `json:"debug"`
56}
57
58func GetGravatarUrl(text string) string {
59	if setting.DisableGravatar {
60		return setting.AppSubUrl + "/public/img/user_profile.png"
61	}
62
63	if text == "" {
64		return ""
65	}
66
67	hasher := md5.New()
68	if _, err := hasher.Write([]byte(strings.ToLower(text))); err != nil {
69		mlog.Warn("Failed to hash text", "err", err)
70	}
71	return fmt.Sprintf(setting.AppSubUrl+"/avatar/%x", hasher.Sum(nil))
72}
73
74func GetGravatarUrlWithDefault(text string, defaultText string) string {
75	if text != "" {
76		return GetGravatarUrl(text)
77	}
78
79	text = regNonAlphaNumeric.ReplaceAllString(defaultText, "") + "@localhost"
80
81	return GetGravatarUrl(text)
82}
83
84func IsHiddenUser(userLogin string, signedInUser *models.SignedInUser, cfg *setting.Cfg) bool {
85	if userLogin == "" || signedInUser.IsGrafanaAdmin || userLogin == signedInUser.Login {
86		return false
87	}
88
89	if _, hidden := cfg.HiddenUsers[userLogin]; hidden {
90		return true
91	}
92
93	return false
94}
95