Co-authored-by: Michael Leow <mleow@moneylion.com>
This commit is contained in:
parent
dfc03bc027
commit
769fc3a561
@ -4,7 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
@ -4,8 +4,8 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/controllers"
|
"github.com/owncast/owncast/controllers"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
@ -3,10 +3,10 @@ package admin
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/controllers"
|
"github.com/owncast/owncast/controllers"
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
|
|
||||||
"github.com/gabek/owncast/core/rtmp"
|
"github.com/owncast/owncast/core/rtmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DisconnectInboundConnection will force-disconnect an inbound stream
|
// DisconnectInboundConnection will force-disconnect an inbound stream
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/metrics"
|
"github.com/owncast/owncast/metrics"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetHardwareStats will return hardware utilization over time
|
// GetHardwareStats will return hardware utilization over time
|
||||||
|
@ -4,9 +4,9 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/controllers"
|
"github.com/owncast/owncast/controllers"
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetInboundBroadasterDetails gets the details of the inbound broadcaster
|
// GetInboundBroadasterDetails gets the details of the inbound broadcaster
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetServerConfig gets the config details of the server
|
// GetServerConfig gets the config details of the server
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/metrics"
|
"github.com/owncast/owncast/metrics"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetViewersOverTime will return the number of viewers at points in time
|
// GetViewersOverTime will return the number of viewers at points in time
|
||||||
|
@ -4,9 +4,9 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/router/middleware"
|
"github.com/owncast/owncast/router/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
//GetChatMessages gets all of the chat messages
|
//GetChatMessages gets all of the chat messages
|
||||||
|
@ -4,8 +4,8 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/router/middleware"
|
"github.com/owncast/owncast/router/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
//GetWebConfig gets the status of the server
|
//GetWebConfig gets the status of the server
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
type j map[string]interface{}
|
type j map[string]interface{}
|
||||||
|
@ -8,8 +8,8 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,10 +11,10 @@ import (
|
|||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
"github.com/gabek/owncast/router/middleware"
|
"github.com/owncast/owncast/router/middleware"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MetadataPage struct {
|
type MetadataPage struct {
|
||||||
|
@ -4,8 +4,8 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
"github.com/gabek/owncast/router/middleware"
|
"github.com/owncast/owncast/router/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
//GetStatus gets the status of the server
|
//GetStatus gets the status of the server
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
//Setup sets up the chat server
|
//Setup sets up the chat server
|
||||||
|
@ -9,8 +9,8 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"golang.org/x/net/websocket"
|
"golang.org/x/net/websocket"
|
||||||
|
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
|
|
||||||
"github.com/teris-io/shortid"
|
"github.com/teris-io/shortid"
|
||||||
)
|
)
|
||||||
|
@ -5,9 +5,9 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
@ -8,8 +8,8 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"golang.org/x/net/websocket"
|
"golang.org/x/net/websocket"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -3,8 +3,8 @@ package core
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/gabek/owncast/core/chat"
|
"github.com/owncast/owncast/core/chat"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
//ChatListenerImpl the implementation of the chat client
|
//ChatListenerImpl the implementation of the chat client
|
||||||
|
12
core/core.go
12
core/core.go
@ -9,12 +9,12 @@ import (
|
|||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/core/chat"
|
"github.com/owncast/owncast/core/chat"
|
||||||
"github.com/gabek/owncast/core/ffmpeg"
|
"github.com/owncast/owncast/core/ffmpeg"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
"github.com/gabek/owncast/yp"
|
"github.com/owncast/owncast/yp"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package ffmpeg
|
package ffmpeg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
//ShowStreamOfflineState generates and shows the stream's offline state
|
//ShowStreamOfflineState generates and shows the stream's offline state
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
//StartThumbnailGenerator starts generating thumbnails
|
//StartThumbnailGenerator starts generating thumbnails
|
||||||
|
@ -10,8 +10,8 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/teris-io/shortid"
|
"github.com/teris-io/shortid"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _commandExec *exec.Cmd
|
var _commandExec *exec.Cmd
|
||||||
|
@ -12,9 +12,9 @@ import (
|
|||||||
|
|
||||||
"github.com/radovskyb/watcher"
|
"github.com/radovskyb/watcher"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -14,11 +14,11 @@ import (
|
|||||||
"github.com/nareix/joy5/format/flv/flvio"
|
"github.com/nareix/joy5/format/flv/flvio"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
"github.com/gabek/owncast/core/ffmpeg"
|
"github.com/owncast/owncast/core/ffmpeg"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
"github.com/nareix/joy5/format/rtmp"
|
"github.com/nareix/joy5/format/rtmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/nareix/joy5/format/flv/flvio"
|
"github.com/nareix/joy5/format/flv/flvio"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,9 +10,9 @@ import (
|
|||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -3,10 +3,10 @@ package core
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/core/ffmpeg"
|
"github.com/owncast/owncast/core/ffmpeg"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
//GetStatus gets the status of the system
|
//GetStatus gets the status of the system
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/core/playlist"
|
"github.com/owncast/owncast/core/playlist"
|
||||||
"github.com/gabek/owncast/core/storageproviders"
|
"github.com/owncast/owncast/core/storageproviders"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -13,8 +13,8 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/s3/s3manager"
|
"github.com/aws/aws-sdk-go/service/s3/s3manager"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/models"
|
"github.com/owncast/owncast/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
//S3Storage is the s3 implementation of the ChunkStorageProvider
|
//S3Storage is the s3 implementation of the ChunkStorageProvider
|
||||||
|
2
go.mod
2
go.mod
@ -1,4 +1,4 @@
|
|||||||
module github.com/gabek/owncast
|
module github.com/owncast/owncast
|
||||||
|
|
||||||
go 1.14
|
go 1.14
|
||||||
|
|
||||||
|
8
main.go
8
main.go
@ -7,10 +7,10 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
"github.com/gabek/owncast/metrics"
|
"github.com/owncast/owncast/metrics"
|
||||||
"github.com/gabek/owncast/router"
|
"github.com/owncast/owncast/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
// the following are injected at build-time
|
// the following are injected at build-time
|
||||||
|
@ -3,7 +3,7 @@ package metrics
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gabek/owncast/core"
|
"github.com/owncast/owncast/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
// How often we poll for updates
|
// How often we poll for updates
|
||||||
|
@ -3,7 +3,7 @@ package models
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
//Stats holds the stats for the system
|
//Stats holds the stats for the system
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import "github.com/gabek/owncast/utils"
|
import "github.com/owncast/owncast/utils"
|
||||||
|
|
||||||
//Status represents the status of the system
|
//Status represents the status of the system
|
||||||
type Status struct {
|
type Status struct {
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"crypto/subtle"
|
"crypto/subtle"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,14 +6,14 @@ import (
|
|||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/controllers"
|
"github.com/owncast/owncast/controllers"
|
||||||
"github.com/gabek/owncast/controllers/admin"
|
"github.com/owncast/owncast/controllers/admin"
|
||||||
|
|
||||||
"github.com/gabek/owncast/core/chat"
|
"github.com/owncast/owncast/core/chat"
|
||||||
"github.com/gabek/owncast/core/rtmp"
|
"github.com/owncast/owncast/core/rtmp"
|
||||||
"github.com/gabek/owncast/router/middleware"
|
"github.com/owncast/owncast/router/middleware"
|
||||||
"github.com/gabek/owncast/yp"
|
"github.com/owncast/owncast/yp"
|
||||||
)
|
)
|
||||||
|
|
||||||
//Start starts the router for the http, ws, and rtmp
|
//Start starts the router for the http, ws, and rtmp
|
||||||
|
@ -52,7 +52,7 @@ build() {
|
|||||||
|
|
||||||
pushd dist/${NAME} >> /dev/null
|
pushd dist/${NAME} >> /dev/null
|
||||||
|
|
||||||
CGO_ENABLED=1 ~/go/bin/xgo --branch ${GIT_BRANCH} -ldflags "-s -w -X main.GitCommit=${GIT_COMMIT} -X main.BuildVersion=${VERSION} -X main.BuildType=${NAME}" -targets "${OS}/${ARCH}" github.com/gabek/owncast
|
CGO_ENABLED=1 ~/go/bin/xgo --branch ${GIT_BRANCH} -ldflags "-s -w -X main.GitCommit=${GIT_COMMIT} -X main.BuildVersion=${VERSION} -X main.BuildType=${NAME}" -targets "${OS}/${ARCH}" github.com/owncast/owncast
|
||||||
mv owncast-*-${ARCH} owncast
|
mv owncast-*-${ARCH} owncast
|
||||||
|
|
||||||
zip -r -q -8 ../owncast-$NAME-$VERSION.zip .
|
zip -r -q -8 ../owncast-$NAME-$VERSION.zip .
|
||||||
@ -76,7 +76,7 @@ git tag -a "v${VERSION}" -m "Release build v${VERSION}"
|
|||||||
|
|
||||||
# On macOS open the Github page for new releases so they can be uploaded
|
# On macOS open the Github page for new releases so they can be uploaded
|
||||||
if test -f "/usr/bin/open"; then
|
if test -f "/usr/bin/open"; then
|
||||||
open "https://github.com/gabek/owncast/releases/new"
|
open "https://github.com/owncast/owncast/releases/new"
|
||||||
open dist
|
open dist
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -90,8 +90,8 @@ cd $(git rev-parse --show-toplevel)
|
|||||||
|
|
||||||
# Github Packages
|
# Github Packages
|
||||||
docker build --build-arg NAME=docker --build-arg VERSION=${VERSION} --build-arg GIT_COMMIT=$GIT_COMMIT -t owncast . -f scripts/Dockerfile-build
|
docker build --build-arg NAME=docker --build-arg VERSION=${VERSION} --build-arg GIT_COMMIT=$GIT_COMMIT -t owncast . -f scripts/Dockerfile-build
|
||||||
docker tag $DOCKER_IMAGE docker.pkg.github.com/gabek/owncast/$DOCKER_IMAGE:$VERSION
|
docker tag $DOCKER_IMAGE docker.pkg.github.com/owncast/owncast/$DOCKER_IMAGE:$VERSION
|
||||||
docker push docker.pkg.github.com/gabek/owncast/$DOCKER_IMAGE:$VERSION
|
docker push docker.pkg.github.com/owncast/owncast/$DOCKER_IMAGE:$VERSION
|
||||||
#
|
#
|
||||||
# Dockerhub
|
# Dockerhub
|
||||||
# You must be authenticated via `docker login` with your Dockerhub credentials first.
|
# You must be authenticated via `docker login` with your Dockerhub credentials first.
|
||||||
|
@ -4,8 +4,8 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/owncast/owncast/config"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/owncast/owncast/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ypDetailsResponse struct {
|
type ypDetailsResponse struct {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user