func (h *Handler) SubscribeNotification(u *url.URL, header http.Header, temp *socialapimodels.Account, context *socialapimodels.Context) (int, http.Header, interface{}, error) { if !context.IsLoggedIn() { return response.NewBadRequest(socialapimodels.ErrNotLoggedIn) } account := context.Client.Account // authenticate user to their notification channel a := new(models.Authenticate) a.Channel = models.NewNotificationChannel(account) a.Account = account // TODO need async requests. Re-try in case of an error err := h.pubnub.Authenticate(a) if err != nil { return response.NewBadRequest(err) } return responseWithCookie(temp, account.Token) }
// SubscribeChannel checks users channel accessability and regarding to that // grants channel access for them func (h *Handler) SubscribeChannel(u *url.URL, header http.Header, req *models.Channel, context *socialapimodels.Context) (int, http.Header, interface{}, error) { if !context.IsLoggedIn() { return response.NewBadRequest(socialapimodels.ErrNotLoggedIn) } req.Group = context.GroupName // override group name res, err := h.checkParticipation(u, header, req) if err != nil { return response.NewAccessDenied(err) } // user has access permission, now authenticate user to channel via pubnub a := new(models.Authenticate) a.Channel = models.NewPrivateMessageChannel(*res.Channel) a.Account = res.Account a.Account.Token = res.AccountToken err = h.pubnub.Authenticate(a) if err != nil { return response.NewBadRequest(err) } return responseWithCookie(req, a.Account.Token) }