streaming.go (2138B)
1 // GoToSocial 2 // Copyright (C) GoToSocial Authors admin@gotosocial.org 3 // SPDX-License-Identifier: AGPL-3.0-or-later 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 package streaming 19 20 import ( 21 "net/http" 22 "time" 23 24 "github.com/gin-gonic/gin" 25 "github.com/gorilla/websocket" 26 "github.com/superseriousbusiness/gotosocial/internal/processing" 27 ) 28 29 const ( 30 BasePath = "/v1/streaming" // path for the streaming api, minus the 'api' prefix 31 StreamQueryKey = "stream" // type of stream being requested 32 StreamListKey = "list" // id of list being requested 33 StreamTagKey = "tag" // name of tag being requested 34 AccessTokenQueryKey = "access_token" // oauth access token 35 AccessTokenHeader = "Sec-Websocket-Protocol" //nolint:gosec 36 ) 37 38 type Module struct { 39 processor *processing.Processor 40 dTicker time.Duration 41 wsUpgrade websocket.Upgrader 42 } 43 44 func New(processor *processing.Processor, dTicker time.Duration, wsBuf int) *Module { 45 return &Module{ 46 processor: processor, 47 dTicker: dTicker, 48 wsUpgrade: websocket.Upgrader{ 49 ReadBufferSize: wsBuf, // we don't expect reads 50 WriteBufferSize: wsBuf, 51 52 // we expect cors requests (via eg., semaphore.social) so be lenient 53 CheckOrigin: func(r *http.Request) bool { return true }, 54 }, 55 } 56 } 57 58 func (m *Module) Route(attachHandler func(method string, path string, f ...gin.HandlerFunc) gin.IRoutes) { 59 attachHandler(http.MethodGet, BasePath, m.StreamGETHandler) 60 }