mirror of
				https://github.com/owncast/owncast.git
				synced 2025-11-01 02:44:31 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package controllers
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"net/http"
 | |
| 	"net/url"
 | |
| 
 | |
| 	"github.com/owncast/owncast/activitypub"
 | |
| 	"github.com/owncast/owncast/config"
 | |
| 	"github.com/owncast/owncast/core/data"
 | |
| 	"github.com/owncast/owncast/models"
 | |
| 	"github.com/owncast/owncast/router/middleware"
 | |
| 	"github.com/owncast/owncast/utils"
 | |
| 	log "github.com/sirupsen/logrus"
 | |
| )
 | |
| 
 | |
| type webConfigResponse struct {
 | |
| 	Name                 string                       `json:"name"`
 | |
| 	Summary              string                       `json:"summary"`
 | |
| 	Logo                 string                       `json:"logo"`
 | |
| 	Tags                 []string                     `json:"tags"`
 | |
| 	Version              string                       `json:"version"`
 | |
| 	NSFW                 bool                         `json:"nsfw"`
 | |
| 	SocketHostOverride   string                       `json:"socketHostOverride,omitempty"`
 | |
| 	ExtraPageContent     string                       `json:"extraPageContent"`
 | |
| 	StreamTitle          string                       `json:"streamTitle,omitempty"` // What's going on with the current stream
 | |
| 	SocialHandles        []models.SocialHandle        `json:"socialHandles"`
 | |
| 	ChatDisabled         bool                         `json:"chatDisabled"`
 | |
| 	ExternalActions      []models.ExternalAction      `json:"externalActions"`
 | |
| 	CustomStyles         string                       `json:"customStyles"`
 | |
| 	MaxSocketPayloadSize int                          `json:"maxSocketPayloadSize"`
 | |
| 	Federation           federationConfigResponse     `json:"federation"`
 | |
| 	Notifications        notificationsConfigResponse  `json:"notifications"`
 | |
| 	Authentication       authenticationConfigResponse `json:"authentication"`
 | |
| }
 | |
| 
 | |
| type federationConfigResponse struct {
 | |
| 	Enabled       bool   `json:"enabled"`
 | |
| 	Account       string `json:"account,omitempty"`
 | |
| 	FollowerCount int    `json:"followerCount,omitempty"`
 | |
| }
 | |
| 
 | |
| type browserNotificationsConfigResponse struct {
 | |
| 	Enabled   bool   `json:"enabled"`
 | |
| 	PublicKey string `json:"publicKey,omitempty"`
 | |
| }
 | |
| 
 | |
| type notificationsConfigResponse struct {
 | |
| 	Browser browserNotificationsConfigResponse `json:"browser"`
 | |
| }
 | |
| 
 | |
| type authenticationConfigResponse struct {
 | |
| 	IndieAuthEnabled bool `json:"indieAuthEnabled"`
 | |
| }
 | |
| 
 | |
| // GetWebConfig gets the status of the server.
 | |
| func GetWebConfig(w http.ResponseWriter, r *http.Request) {
 | |
| 	middleware.EnableCors(w)
 | |
| 	middleware.DisableCache(w)
 | |
| 	w.Header().Set("Content-Type", "application/json")
 | |
| 
 | |
| 	pageContent := utils.RenderPageContentMarkdown(data.GetExtraPageBodyContent())
 | |
| 	socialHandles := data.GetSocialHandles()
 | |
| 	for i, handle := range socialHandles {
 | |
| 		platform := models.GetSocialHandle(handle.Platform)
 | |
| 		if platform != nil {
 | |
| 			handle.Icon = platform.Icon
 | |
| 			socialHandles[i] = handle
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	serverSummary := data.GetServerSummary()
 | |
| 
 | |
| 	var federationResponse federationConfigResponse
 | |
| 	federationEnabled := data.GetFederationEnabled()
 | |
| 
 | |
| 	followerCount, _ := activitypub.GetFollowerCount()
 | |
| 	if federationEnabled {
 | |
| 		serverURLString := data.GetServerURL()
 | |
| 		serverURL, _ := url.Parse(serverURLString)
 | |
| 		account := fmt.Sprintf("%s@%s", data.GetDefaultFederationUsername(), serverURL.Host)
 | |
| 		federationResponse = federationConfigResponse{
 | |
| 			Enabled:       federationEnabled,
 | |
| 			FollowerCount: int(followerCount),
 | |
| 			Account:       account,
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	browserPushEnabled := data.GetBrowserPushConfig().Enabled
 | |
| 	browserPushPublicKey, err := data.GetBrowserPushPublicKey()
 | |
| 	if err != nil {
 | |
| 		log.Errorln("unable to fetch browser push notifications public key", err)
 | |
| 		browserPushEnabled = false
 | |
| 	}
 | |
| 
 | |
| 	notificationsResponse := notificationsConfigResponse{
 | |
| 		Browser: browserNotificationsConfigResponse{
 | |
| 			Enabled:   browserPushEnabled,
 | |
| 			PublicKey: browserPushPublicKey,
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	authenticationResponse := authenticationConfigResponse{
 | |
| 		IndieAuthEnabled: data.GetServerURL() != "",
 | |
| 	}
 | |
| 
 | |
| 	configuration := webConfigResponse{
 | |
| 		Name:                 data.GetServerName(),
 | |
| 		Summary:              serverSummary,
 | |
| 		Logo:                 "/logo",
 | |
| 		Tags:                 data.GetServerMetadataTags(),
 | |
| 		Version:              config.GetReleaseString(),
 | |
| 		NSFW:                 data.GetNSFW(),
 | |
| 		SocketHostOverride:   data.GetWebsocketOverrideHost(),
 | |
| 		ExtraPageContent:     pageContent,
 | |
| 		StreamTitle:          data.GetStreamTitle(),
 | |
| 		SocialHandles:        socialHandles,
 | |
| 		ChatDisabled:         data.GetChatDisabled(),
 | |
| 		ExternalActions:      data.GetExternalActions(),
 | |
| 		CustomStyles:         data.GetCustomStyles(),
 | |
| 		MaxSocketPayloadSize: config.MaxSocketPayloadSize,
 | |
| 		Federation:           federationResponse,
 | |
| 		Notifications:        notificationsResponse,
 | |
| 		Authentication:       authenticationResponse,
 | |
| 	}
 | |
| 
 | |
| 	if err := json.NewEncoder(w).Encode(configuration); err != nil {
 | |
| 		BadRequestHandler(w, err)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // GetAllSocialPlatforms will return a list of all social platform types.
 | |
| func GetAllSocialPlatforms(w http.ResponseWriter, r *http.Request) {
 | |
| 	middleware.EnableCors(w)
 | |
| 	w.Header().Set("Content-Type", "application/json")
 | |
| 
 | |
| 	platforms := models.GetAllSocialHandles()
 | |
| 	if err := json.NewEncoder(w).Encode(platforms); err != nil {
 | |
| 		InternalErrorHandler(w, err)
 | |
| 	}
 | |
| }
 | 
