/* Search is used for retrieving watchers. It accepts the following GET params: + duuid - uuid of domain + domain - string of domain + name - string of name */ func Search(w http.ResponseWriter, r *http.Request, params url.Values, limit, offset int) { query := db.SELECT var where []string var args []interface{} i := 1 for k, _ := range params { switch k { case "user": user, err := auth.GetUser(r) if err != nil { util.Error(err, w) return } where = append(where, fmt.Sprintf("users@> '[%d]'", user.ID)) i++ case "name": where = append(where, fmt.Sprintf(k+" = $%d", i)) args = append(args, params.Get(k)) i++ case "duuid", "domain": where = append(where, fmt.Sprintf("domain = $%d", i)) args = append(args, params.Get(k)) i++ } } if len(where) > 0 { query += "WHERE " + strings.Join(where, " AND ") + " " } query += fmt.Sprintf("LIMIT $%d OFFSET $%d", len(args)+1, len(args)+2) args = append(args, limit, offset) log.Info("Query: " + query) log.Info("Args: %+v", args) watcherList, err := db.GetList(query, args...) util.ToJSON(watcherList, err, w) }
func Create(w http.ResponseWriter, r *http.Request) { var post struct { Domain string `json:"domain"` Name string `json:"name"` Interval string `json:"interval"` } decoder := json.NewDecoder(r.Body) err := decoder.Decode(&post) if err != nil { util.Error(err, w) return } var domain domains.Domain if len(post.Name) > 0 { name, tld, err := tlds.DetectDomainAndTLD(post.Name) if err != nil { util.Error(err, w) return } domain, err = domains.GetByNameAndTLD(name, tld).One() if err != nil { domain = domains.New(name, tld) err = domain.Insert() if err != nil { util.Error(err, w) return } } } else { domain, err = domains.GetByUUID(post.Domain).One() if err != nil { util.Error(err, w) return } } watcher, err := db.GetByDomain(domain).One() if err != nil { watcher, err = db.New(domain, post.Interval) if err != nil { util.Error(err, w) return } } watcher.SetLowerInterval(post.Interval) user, err := auth.GetUser(r) if err != nil { util.Error(err, w) return } watcher.AddUser(*user) err = watcher.Save() log.Info("%+v", watcher) dispatcher.AddDomain(domain) util.ToJSON(watcher, err, w) }
/* Search is used for retrieving notifications. It accepts the following GET params: */ func Search(w http.ResponseWriter, r *http.Request, params url.Values, limit, offset int) { query := db.SELECT var where []string var args []interface{} var orderBy = "" i := 1 // inject user user, err := auth.GetUser(r) if err != nil { util.Error(err, w) return } where = append(where, fmt.Sprintf("user_id = $%d", i)) args = append(args, user.ID) i++ for k, _ := range params { switch k { case "duuid": where = append(where, fmt.Sprintf("domain = $%d", i)) args = append(args, params.Get(k)) i++ case "orderBy": orderBy = fmt.Sprintf("ORDER BY $%d ", i) args = append(args, params.Get(k)) if v, ok := params["order"]; ok { order := strings.ToLower(v[0]) if order == "desc" { orderBy += "DESC " } else if order == "asc" { orderBy += "ASC " } } } } if len(where) > 0 { query += "WHERE " + strings.Join(where, " AND ") + " " } if len(orderBy) > 0 { query += orderBy + " " } query += fmt.Sprintf("LIMIT $%d OFFSET $%d", len(args)+1, len(args)+2) args = append(args, limit, offset) log.Info("Query: " + query) log.Info("Args: %+v", args) notificationList, err := db.GetList(query, args...) util.ToJSON(notificationList, err, w) }
func Archive(w http.ResponseWriter, r *http.Request) { var post []db.Message decoder := json.NewDecoder(r.Body) err := decoder.Decode(&post) if err != nil { util.Error(err, w) return } user, err := auth.GetUser(r) if err != nil { util.Error(err, w) return } note, err := db.GetByUser(*user).One() if err != nil { util.Error(err, w) return } note.ArchiveMessages(post) util.ToJSON(post, nil, w) }