func Search(c *middleware.Context) { query := c.Query("query") tags := c.QueryStrings("tag") starred := c.Query("starred") limit := c.QueryInt("limit") if limit == 0 { limit = 1000 } searchQuery := search.Query{ Title: query, Tags: tags, UserId: c.UserId, Limit: limit, IsStarred: starred == "true", OrgId: c.OrgId, } err := bus.Dispatch(&searchQuery) if err != nil { c.JsonApiErr(500, "Search failed", err) return } dashQuery := m.GetCurrentDashboardDashboard{} dashQuery.UserId = c.UserId err = bus.Dispatch(&dashQuery) if err != nil { c.JsonApiErr(500, "Get Dasboard Id failed", err) return } if c.OrgRole != "Admin" || !c.IsGrafanaAdmin { for index, hit := range searchQuery.Result { isDelete := true for _, dash := range dashQuery.Result { if dash.Id == hit.Id { isDelete = false } } if isDelete { last := index + 1 if last > len(searchQuery.Result) { last = len(searchQuery.Result) } searchQuery.Result = append(searchQuery.Result[:index], searchQuery.Result[last:]...) } } } c.JSON(200, searchQuery.Result) }
func SearchOrgs(c *middleware.Context) Response { query := m.SearchOrgsQuery{ Query: c.Query("query"), Name: c.Query("name"), Page: 0, Limit: 1000, } if err := bus.Dispatch(&query); err != nil { return ApiError(500, "Failed to search orgs", err) } return Json(200, query.Result) }
func setIndexViewData(c *middleware.Context) error { settings, err := getFrontendSettingsMap(c) if err != nil { return err } currentUser := &dtos.CurrentUser{ Id: c.UserId, IsSignedIn: c.IsSignedIn, Login: c.Login, Email: c.Email, Name: c.Name, LightTheme: c.Theme == "light", OrgId: c.OrgId, OrgName: c.OrgName, OrgRole: c.OrgRole, GravatarUrl: dtos.GetGravatarUrl(c.Email), IsGrafanaAdmin: c.IsGrafanaAdmin, } if setting.DisableGravatar { currentUser.GravatarUrl = setting.AppSubUrl + "/img/user_profile.png" } if len(currentUser.Name) == 0 { currentUser.Name = currentUser.Login } themeUrlParam := c.Query("theme") if themeUrlParam == "light" { currentUser.LightTheme = true } c.Data["User"] = currentUser c.Data["Settings"] = settings c.Data["AppUrl"] = setting.AppUrl c.Data["AppSubUrl"] = setting.AppSubUrl if setting.GoogleAnalyticsId != "" { c.Data["GoogleAnalyticsId"] = setting.GoogleAnalyticsId } if setting.GoogleTagManagerId != "" { c.Data["GoogleTagManagerId"] = setting.GoogleTagManagerId } return nil }
func OAuthLogin(ctx *middleware.Context) { if setting.OAuthService == nil { ctx.Handle(404, "login.OAuthLogin(oauth service not enabled)", nil) return } name := ctx.Params(":name") connect, ok := social.SocialMap[name] if !ok { ctx.Handle(404, "login.OAuthLogin(social login not enabled)", errors.New(name)) return } code := ctx.Query("code") if code == "" { ctx.Redirect(connect.AuthCodeURL("", oauth2.AccessTypeOnline)) return } // handle call back token, err := connect.Exchange(oauth2.NoContext, code) if err != nil { ctx.Handle(500, "login.OAuthLogin(NewTransportWithCode)", err) return } log.Trace("login.OAuthLogin(Got token)") userInfo, err := connect.UserInfo(token) if err != nil { if err == social.ErrMissingTeamMembership { ctx.Redirect(setting.AppSubUrl + "/login?failedMsg=" + url.QueryEscape("Required Github team membership not fulfilled")) } else if err == social.ErrMissingOrganizationMembership { ctx.Redirect(setting.AppSubUrl + "/login?failedMsg=" + url.QueryEscape("Required Github organization membership not fulfilled")) } else { ctx.Handle(500, fmt.Sprintf("login.OAuthLogin(get info from %s)", name), err) } return } log.Trace("login.OAuthLogin(social login): %s", userInfo) // validate that the email is allowed to login to grafana if !connect.IsEmailAllowed(userInfo.Email) { log.Info("OAuth login attempt with unallowed email, %s", userInfo.Email) ctx.Redirect(setting.AppSubUrl + "/login?failedMsg=" + url.QueryEscape("Required email domain not fulfilled")) return } userQuery := m.GetUserByLoginQuery{LoginOrEmail: userInfo.Email} err = bus.Dispatch(&userQuery) // create account if missing if err == m.ErrUserNotFound { if !connect.IsSignupAllowed() { ctx.Redirect(setting.AppSubUrl + "/login") return } limitReached, err := middleware.QuotaReached(ctx, "user") if err != nil { ctx.Handle(500, "Failed to get user quota", err) return } if limitReached { ctx.Redirect(setting.AppSubUrl + "/login") return } cmd := m.CreateUserCommand{ Login: userInfo.Email, Email: userInfo.Email, Name: userInfo.Name, Company: userInfo.Company, } if err = bus.Dispatch(&cmd); err != nil { ctx.Handle(500, "Failed to create account", err) return } userQuery.Result = &cmd.Result } else if err != nil { ctx.Handle(500, "Unexpected error", err) } // login loginUserWithUser(userQuery.Result, ctx) metrics.M_Api_Login_OAuth.Inc(1) ctx.Redirect(setting.AppSubUrl + "/") }