// Read handles GET func (ctl *AttributeController) Read(c *models.Context) { _, itemTypeID, itemID, status, err := c.GetItemTypeAndItemID() if err != nil { c.RespondWithErrorDetail(err, status) return } perms := models.GetPermission(models.MakeAuthorisationContext(c, 0, itemTypeID, itemID)) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } attributeID, status, err := models.GetAttributeID(itemTypeID, itemID, c.RouteVars["key"]) if err != nil { c.RespondWithErrorDetail(err, status) return } m, status, err := models.GetAttribute(attributeID) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(m) }
// Read handles GET func (ctl *UserController) Read(c *models.Context) { _, itemTypeID, itemID, status, err := c.GetItemTypeAndItemID() if err != nil { c.RespondWithErrorDetail(err, status) return } // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, itemTypeID, itemID), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation m, status, err := models.GetUser(itemID) if err != nil { c.RespondWithErrorDetail(err, status) return } if !models.UserIsOnSite(m.ID, c.Site.ID) { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } c.RespondWithData(m) }
// Read handles GET either by /site or /sites/{site_id} func (ctl *SiteController) Read(c *models.Context) { // Check whether this site is being accessed by ID siteQuery, exists := c.RouteVars["site_id"] if exists { siteID, err := strconv.ParseInt(siteQuery, 10, 64) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("The supplied site ID ('%s') is not a number.", siteQuery), http.StatusBadRequest, ) return } site, status, err := models.GetSite(siteID) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("No site with ID %d found", siteID), status, ) return } c.RespondWithData(site) return } // Site already populated in context, so only fetch permissions c.Site.Meta.Permissions = models.GetPermission( models.MakeAuthorisationContext( c, 0, h.ItemTypes[h.ItemTypeSite], c.Site.ID), ) c.RespondWithData(c.Site) return }
// ReadMany handles GET for the collection func (ctl *TrendingController) ReadMany(c *models.Context) { limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } trending, total, pages, status, err := models.GetTrending(c.Site.ID, c.Auth.ProfileID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } response := models.TrendingItems{} response.Items = h.ConstructArray( trending, "items", total, limit, offset, pages, c.Request.URL, ) thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) response.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(response) }
// Read handles GET // Returns information on a profile assigned to this role func (ctl *RoleProfileController) Read(c *models.Context) { // Validate inputs var microcosmID int64 if sid, exists := c.RouteVars["microcosm_id"]; exists { id, err := strconv.ParseInt(sid, 10, 64) if err != nil { c.RespondWithErrorMessage("microcosm_id in URL is not a number", http.StatusBadRequest) return } microcosmID = id } roleID, err := strconv.ParseInt(c.RouteVars["role_id"], 10, 64) if err != nil { c.RespondWithErrorMessage("role_id in URL is not a number", http.StatusBadRequest) return } _, status, err := models.GetRole(c.Site.ID, microcosmID, roleID, c.Auth.ProfileID) if err != nil { c.RespondWithErrorDetail(err, status) return } profileID, err := strconv.ParseInt(c.RouteVars["profile_id"], 10, 64) if err != nil { c.RespondWithErrorMessage("profile_id in URL is not a number", http.StatusBadRequest) return } // Authorisation perms := models.GetPermission( models.MakeAuthorisationContext(c, microcosmID, h.ItemTypes[h.ItemTypeMicrocosm], microcosmID), ) if microcosmID > 0 { // Related to a Microcosm if !perms.IsModerator && !c.Auth.IsSiteOwner { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } } else { // Default role for the site if !c.Auth.IsSiteOwner { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } } m, status, err := models.GetRoleProfile(c.Site.ID, roleID, profileID) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(m) }
// ReadMany handles GET // If microcosm_id is provided in request args then these are the roles for this // microcosm, otherwise this is a list of the default roles on this site func (ctl *RolesController) ReadMany(c *models.Context) { var microcosmID int64 if sid, exists := c.RouteVars["microcosm_id"]; exists { id, err := strconv.ParseInt(sid, 10, 64) if err != nil { c.RespondWithErrorMessage("microcosm_id in URL is not a number", http.StatusBadRequest) return } microcosmID = id } perms := models.GetPermission( models.MakeAuthorisationContext(c, 0, h.ItemTypes[h.ItemTypeMicrocosm], microcosmID), ) if microcosmID > 0 { // Related to a Microcosm if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } } else { // Default role for the site if !c.Auth.IsSiteOwner { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } } // Fetch query string args if any exist limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetRoles(c.Site.ID, microcosmID, c.Auth.ProfileID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response m := models.RolesType{} m.Roles = h.ConstructArray( ems, h.APITypeRole, total, limit, offset, pages, c.Request.URL, ) c.RespondWithData(m) }
// Read handles GET func (ctl *PermissionController) Read(c *models.Context) { ac, status, err := GetAuthContext(c) if err != nil { c.RespondWithErrorDetail(err, status) return } m := models.GetPermission(ac) c.RespondWithData(m) }
// Read handles GET func (ctl *MenuController) Read(c *models.Context, siteID int64) { ems, status, err := models.GetMenu(siteID) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(ems) }
// ReadMany handles GET func (ctl *EventsController) ReadMany(c *models.Context) { // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, h.ItemTypes[h.ItemTypeEvent], 0), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation // Fetch query string args if any exist query := c.Request.URL.Query() limit, offset, status, err := h.GetLimitAndOffset(query) if err != nil { c.RespondWithErrorDetail(err, status) return } attending, status, err := h.GetAttending(query) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetEvents(c.Site.ID, c.Auth.ProfileID, attending, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.EventsType{} m.Events = h.ConstructArray( ems, h.APITypeEvent, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } m.Meta.Permissions = perms c.RespondWithData(m) }
// Read handles GET func (ctl *AuthController) Read(c *models.Context) { // Extract access token from request and retrieve its metadata m, status, err := models.GetAccessToken(c.RouteVars["id"]) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("Error retrieving access token: %v", err.Error()), status, ) return } c.RespondWithData(m) }
// Read handles GET func (ctl *SearchController) Read(c *models.Context) { results, status, err := models.Search( c.Site.ID, *c.Request.URL, c.Auth.ProfileID, ) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(results) }
// ReadMany handles GET for the collection func (ctl *HuddleParticipantsController) ReadMany(c *models.Context) { // Validate inputs huddleID, err := strconv.ParseInt(c.RouteVars["huddle_id"], 10, 64) if err != nil { c.RespondWithErrorMessage("huddle_id in URL is not a number", http.StatusBadRequest) return } r, status, err := models.GetHuddle(c.Site.ID, c.Auth.ProfileID, huddleID) if err != nil { c.RespondWithErrorDetail(err, status) return } // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, h.ItemTypes[h.ItemTypeHuddle], huddleID), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetHuddleParticipants(c.Site.ID, huddleID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response m := models.HuddleParticipantsType{} m.HuddleParticipants = h.ConstructArray( ems, fmt.Sprintf("%s/participants", r.GetLink()), total, limit, offset, pages, c.Request.URL, ) c.RespondWithData(m) }
// Read handles GET func (ctl *ProfileOptionsController) Read(c *models.Context) { if c.Auth.ProfileID < 1 { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } m, status, err := models.GetProfileOptions(c.Auth.ProfileID) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(m) }
// ReadMany handles GET for a collection func (ctl *UpdateOptionsController) ReadMany(c *models.Context) { if c.Auth.ProfileID < 1 { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } prefs, status, err := models.GetUpdateOptions(c.Site.ID, c.Auth.ProfileID) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(prefs) }
// ReadMany handles GET for the collection func (ctl *AttachmentsController) ReadMany(c *models.Context) { itemTypeID, itemID, perms, status, err := ParseItemInfo(c) if err != nil { c.RespondWithErrorDetail(err, status) return } if !perms.CanRead { c.RespondWithErrorMessage( h.NoAuthMessage, http.StatusForbidden, ) return } query := c.Request.URL.Query() limit, offset, status, err := h.GetLimitAndOffset(query) if err != nil { c.RespondWithErrorDetail(err, status) return } attachments, total, pages, status, err := models.GetAttachments(itemTypeID, itemID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.AttachmentsType{} m.Attachments = h.ConstructArray( attachments, h.APITypeAttachment, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } m.Meta.Permissions = perms c.RespondWithData(m) }
// Create handles POST func (ctl *WatchersController) Create(c *models.Context) { // Fill from POST data m := WatcherType{} err := c.Fill(&m) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("The post data is invalid: %v", err.Error()), http.StatusBadRequest, ) return } itemType := strings.ToLower(m.ItemType) if itemType != "" { if _, exists := h.ItemTypes[itemType]; !exists { c.RespondWithErrorMessage( fmt.Sprintf("Watcher could not be saved: Item type not found"), http.StatusBadRequest, ) return } m.ItemTypeID = h.ItemTypes[itemType] } else { c.RespondWithErrorMessage( fmt.Sprintf("No itemType supplied, cannot create a watcher"), http.StatusBadRequest, ) return } sendEmail, status, err := models.RegisterWatcher( c.Auth.ProfileID, m.UpdateTypeID, m.ItemID, m.ItemTypeID, c.Site.ID, ) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("Watcher could not be registered: %v", err.Error()), status, ) return } c.RespondWithData(sendEmail) }
// ReadMany handles GET for a collection func (ctl *SitesController) ReadMany(c *models.Context) { limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } var userID int64 // Passing ?filter=owned returns sites owned by logged-in user. if c.Request.FormValue("filter") == "owned" { if c.Auth.UserID == 0 { c.RespondWithErrorMessage( fmt.Sprintf("You must be logged in to list your own sites"), http.StatusForbidden, ) return } userID = c.Auth.UserID } // Passing 0 as userID means return all sites. ems, total, pages, status, err := models.GetSites(userID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.SitesType{} m.Sites = h.ConstructArray( ems, h.APITypeSite, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(m) }
// Read handles GET func (ctl *AttendeeController) Read(c *models.Context) { // Verify ID is a positive integer eventID, err := strconv.ParseInt(c.RouteVars["event_id"], 10, 64) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("The supplied event_id ('%s') is not a number.", c.RouteVars["event_id"]), http.StatusBadRequest, ) return } profileID, err := strconv.ParseInt(c.RouteVars["profile_id"], 10, 64) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("The supplied profile_id ('%s') is not a number.", c.RouteVars["profile_id"]), http.StatusBadRequest, ) return } attendeeID, status, err := models.GetAttendeeID(eventID, profileID) if err != nil { c.RespondWithErrorDetail(err, status) return } // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, h.ItemTypes[h.ItemTypeAttendee], attendeeID), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation // Read Event m, status, err := models.GetAttendee(c.Site.ID, attendeeID) if err != nil { c.RespondWithErrorDetail(err, status) return } m.Meta.Permissions = perms c.RespondWithData(m) }
// ReadMany handles GET for the collection func (ctl *WatchersController) ReadMany(c *models.Context) { if c.Auth.ProfileID < 1 { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } query := c.Request.URL.Query() limit, offset, status, err := h.GetLimitAndOffset(query) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetProfileWatchers( c.Auth.ProfileID, c.Site.ID, limit, offset, ) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.WatchersType{} m.Watchers = h.ConstructArray( ems, h.APITypeWatcher, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(m) }
// ReadMany handles GET func (ctl *IgnoredController) ReadMany(c *models.Context) { if c.Auth.ProfileID < 1 { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetIgnored( c.Site.ID, c.Auth.ProfileID, limit, offset, ) if err != nil { c.RespondWithErrorDetail(err, status) return } thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.IgnoredType{} m.Ignored = h.ConstructArray( ems, `/api/v1/ignored`, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{ Rel: "self", Href: thisLink.String(), }, } c.RespondWithData(m) }
// Read handles GET func (ctl *SiteCheckController) Read(c *models.Context) { _, _, itemID, status, err := c.GetItemTypeAndItemID() if err != nil { c.RespondWithErrorDetail(err, status) return } m, status, err := models.GetSite(itemID) if err != nil { c.RespondWithErrorDetail(err, status) return } // Use the user ID to check, since the current context is a different site (the root site) // than the site the owner profile is associated with. owner, status, err := models.GetProfileSummary(m.ID, m.OwnedByID) if err != nil { c.RespondWithErrorDetail(err, status) return } if owner.UserID != c.Auth.UserID { c.RespondWithErrorMessage( fmt.Sprintf("You must be the owner of the site to view its status"), http.StatusForbidden, ) return } siteHealth, status, err := models.CheckSiteHealth(m) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("Error checking site status: %s", err.Error()), status, ) return } glog.Infof("Got site health: %+v\n", siteHealth) c.RespondWithData(siteHealth) }
// Read handles GET func (ctl *UpdateOptionController) Read(c *models.Context) { if c.Auth.ProfileID < 1 { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } _, _, itemID, status, err := c.GetItemTypeAndItemID() if err != nil { c.RespondWithErrorDetail(err, status) return } m, status, err := models.GetUpdateOptionByUpdateType(c.Auth.ProfileID, itemID) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(m) }
// ReadMany handles GET for a collection func (ctl *AttributesController) ReadMany(c *models.Context) { _, itemTypeID, itemID, status, err := c.GetItemTypeAndItemID() if err != nil { c.RespondWithErrorDetail(err, status) return } perms := models.GetPermission(models.MakeAuthorisationContext(c, 0, itemTypeID, itemID)) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // Fetch query string args if any exist limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetAttributes(itemTypeID, itemID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response m := models.AttributesType{} m.Attributes = h.ConstructArray( ems, fmt.Sprintf(h.APITypeAttribute, c.RouteVars["type"], 0), total, limit, offset, pages, c.Request.URL, ) c.RespondWithData(m) }
// Read handles GET func (ctl *CommentController) Read(c *models.Context) { _, itemTypeID, itemID, status, err := c.GetItemTypeAndItemID() if err != nil { c.RespondWithErrorDetail(err, status) return } // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, itemTypeID, itemID), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation limit, _, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } m, status, err := models.GetComment(c.Site.ID, itemID, c.Auth.ProfileID, limit) if err != nil { c.RespondWithErrorDetail(err, status) return } m.Meta.Permissions = perms if c.Auth.ProfileID > 0 { go models.MarkAsRead(m.ItemTypeID, m.ItemID, c.Auth.ProfileID, m.Meta.Created) } c.RespondWithData(m) }
// ReadMany handles GET func (ctl *MicrocosmsController) ReadMany(c *models.Context) { perms := models.GetPermission( models.MakeAuthorisationContext(c, 0, h.ItemTypes[h.ItemTypeSite], c.Site.ID), ) // Fetch query string args if any exist limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } // Fetch list of microcosms ems, total, pages, status, err := models.GetMicrocosms(c.Site.ID, c.Auth.ProfileID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.MicrocosmsType{} m.Microcosms = h.ConstructArray( ems, h.APITypeMicrocosm, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } m.Meta.Permissions = perms c.RespondWithData(m) }
// Read handles GET func (ctl *LegalController) Read(c *models.Context) { document := c.RouteVars["document"] if document == "" { c.RespondWithErrorMessage( fmt.Sprintf("The legal document does not exist: %s", c.RouteVars["document"]), http.StatusBadRequest, ) return } m, status, err := models.GetLegalDocument(c.Site, document) if err != nil { c.RespondWithErrorMessage( fmt.Sprintf("Could not retrieve legal document: %v", err.Error()), status, ) return } c.RespondWithData(m) return }
// ReadMany handles GET for the collection func (ctl *HuddlesController) ReadMany(c *models.Context) { // NOTE: Auth check skipped, permissions are enforced by limiting the scope // of the underlying queries in the model to only show huddles you are a // participant in // Fetch query string args if any exist limit, offset, status, err := h.GetLimitAndOffset(c.Request.URL.Query()) if err != nil { c.RespondWithErrorDetail(err, status) return } ems, total, pages, status, err := models.GetHuddles(c.Site.ID, c.Auth.ProfileID, limit, offset) if err != nil { c.RespondWithErrorDetail(err, status) return } // Construct the response thisLink := h.GetLinkToThisPage(*c.Request.URL, offset, limit, total) m := models.HuddlesType{} m.Huddles = h.ConstructArray( ems, h.APITypeHuddle, total, limit, offset, pages, c.Request.URL, ) m.Meta.Links = []h.LinkType{ h.LinkType{Rel: "self", Href: thisLink.String()}, } c.RespondWithData(m) }
// Read handles GET func (ctl *HuddleParticipantController) Read(c *models.Context) { huddleID, err := strconv.ParseInt(c.RouteVars["huddle_id"], 10, 64) if err != nil { c.RespondWithErrorMessage("huddle_id in URL is not a number", http.StatusBadRequest) return } _, status, err := models.GetHuddle(c.Site.ID, c.Auth.ProfileID, huddleID) if err != nil { c.RespondWithErrorDetail(err, status) return } // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, h.ItemTypes[h.ItemTypeHuddle], huddleID), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation profileID, err := strconv.ParseInt(c.RouteVars["profile_id"], 10, 64) if err != nil { c.RespondWithErrorMessage("profile_id in URL is not a number", http.StatusBadRequest) return } m, status, err := models.GetHuddleParticipant(c.Site.ID, huddleID, profileID) if err != nil { c.RespondWithErrorDetail(err, status) return } c.RespondWithData(m) }
// Read handles GET func (ctl *Redirect404Controller) Read(c *models.Context) { // Just call this with authentication (if you have it) and pass in the // unknown URL as a GET param: // // https://dev1.microco.sm/api/v1/resolve?url=http%3A%2F%2Fwww.lfgss.com%2Fforumdisplay.php%3Ff%3D1 // // The URL in the GET param should be URL encoded to ensure that if it has // any querystring, nothing goes awry. An example querystring URL might be: // // http://www.lfgss.com/private.php?t=7865&page=32 // // If you don't get a page/offset back from this, then you haven't URL encoded // it. u := c.Request.URL q := u.Query() inURL := q.Get("url") if inURL == "" { c.RespondWithError(http.StatusBadRequest) return } c.RespondWithData(resolver.Resolve(c.Site.ID, inURL, c.Auth.ProfileID)) }
// Read handles GET func (ctl *EventController) Read(c *models.Context) { _, itemTypeID, itemID, status, err := c.GetItemTypeAndItemID() if err != nil { c.RespondWithErrorDetail(err, status) return } // Start Authorisation perms := models.GetPermission( models.MakeAuthorisationContext( c, 0, itemTypeID, itemID), ) if !perms.CanRead { c.RespondWithErrorMessage(h.NoAuthMessage, http.StatusForbidden) return } // End Authorisation // Read Event m, status, err := models.GetEvent(c.Site.ID, itemID, c.Auth.ProfileID) if err != nil { c.RespondWithErrorDetail(err, status) return } // Get Comments m.Comments, status, err = models.GetComments( c.Site.ID, h.ItemTypeEvent, m.ID, c.Request.URL, c.Auth.ProfileID, m.Meta.Created, ) if err != nil { c.RespondWithErrorDetail(err, status) return } m.Meta.Permissions = perms // Mark as read (to the last comment on this page if applicable) if c.Auth.ProfileID > 0 { read := m.Meta.Created switch m.Comments.Items.(type) { case []models.CommentSummaryType: comments := m.Comments.Items.([]models.CommentSummaryType) if len(comments) > 0 { read = comments[len(comments)-1].Meta.Created if m.Comments.Page >= m.Comments.Pages { read = time.Now() } } default: } go models.MarkAsRead(h.ItemTypes[h.ItemTypeEvent], m.ID, c.Auth.ProfileID, read) // Get watcher status watcherID, sendEmail, sendSms, ignored, status, err := models.GetWatcherAndIgnoreStatus( h.ItemTypes[h.ItemTypeEvent], m.ID, c.Auth.ProfileID, ) if err != nil { c.RespondWithErrorDetail(err, status) return } if ignored { m.Meta.Flags.Ignored = true } if watcherID > 0 { m.Meta.Flags.Watched = true m.Meta.Flags.SendEmail = sendEmail m.Meta.Flags.SendSMS = sendSms } } go models.IncrementViewCount(h.ItemTypes[h.ItemTypeEvent], m.ID) c.RespondWithData(m) }