enhancement: introduce theme processing (#9133)
* enhancement: introduce theme processing * enhancement: introduce theme processing * enhancement: add theme processing tests and changelog * Update services/web/pkg/config/config.go Co-authored-by: Michael Barz <michael.barz@zeitgestalten.eu> * fix: ci findings * Apply suggestions from code review Co-authored-by: Martin <github@diemattels.at> * enhancement: use the theme assets from web instead of having them inside the oCis repo (license clash Apache vs. AGPLv3) * fix: golangci tagalign order * fix: rename UnifiedRoleUploader to UnifiedRoleEditorLite * fix: some typos Co-authored-by: Michael Barz <michael.barz@zeitgestalten.eu> * enhancement: export supported theme logo upload filetypes * chore: bump reva * fix: allow init func --------- Co-authored-by: Michael Barz <michael.barz@zeitgestalten.eu> Co-authored-by: Martin <github@diemattels.at>
This commit is contained in:
co-authored by
Michael Barz
Martin
parent
80480cb7fa
commit
eb7c36443f
+2
-2
@@ -22,13 +22,13 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/data"
|
||||
"github.com/cs3org/reva/v2/pkg/appctx"
|
||||
"github.com/cs3org/reva/v2/pkg/owncloud/ocs"
|
||||
)
|
||||
|
||||
func (s *svc) doStatus(w http.ResponseWriter, r *http.Request) {
|
||||
log := appctx.GetLogger(r.Context())
|
||||
status := &data.Status{
|
||||
status := &ocs.Status{
|
||||
Installed: true,
|
||||
Maintenance: false,
|
||||
NeedsDBUpgrade: false,
|
||||
|
||||
Generated
Vendored
+2
-1
@@ -20,6 +20,7 @@ package config
|
||||
|
||||
import (
|
||||
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/data"
|
||||
"github.com/cs3org/reva/v2/pkg/owncloud/ocs"
|
||||
"github.com/cs3org/reva/v2/pkg/sharedconf"
|
||||
"github.com/cs3org/reva/v2/pkg/storage/cache"
|
||||
)
|
||||
@@ -28,7 +29,7 @@ import (
|
||||
type Config struct {
|
||||
Prefix string `mapstructure:"prefix"`
|
||||
Config data.ConfigData `mapstructure:"config"`
|
||||
Capabilities data.CapabilitiesData `mapstructure:"capabilities"`
|
||||
Capabilities ocs.CapabilitiesData `mapstructure:"capabilities"`
|
||||
GatewaySvc string `mapstructure:"gatewaysvc"`
|
||||
StorageregistrySvc string `mapstructure:"storage_registry_svc"`
|
||||
DefaultUploadProtocol string `mapstructure:"default_upload_protocol"`
|
||||
|
||||
Generated
Vendored
+20
-20
@@ -22,13 +22,13 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/config"
|
||||
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/data"
|
||||
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/response"
|
||||
"github.com/cs3org/reva/v2/pkg/owncloud/ocs"
|
||||
)
|
||||
|
||||
// Handler renders the capability endpoint
|
||||
type Handler struct {
|
||||
c data.CapabilitiesData
|
||||
c ocs.CapabilitiesData
|
||||
defaultUploadProtocol string
|
||||
userAgentChunkingMap map[string]string
|
||||
}
|
||||
@@ -41,13 +41,13 @@ func (h *Handler) Init(c *config.Config) {
|
||||
|
||||
// capabilities
|
||||
if h.c.Capabilities == nil {
|
||||
h.c.Capabilities = &data.Capabilities{}
|
||||
h.c.Capabilities = &ocs.Capabilities{}
|
||||
}
|
||||
|
||||
// core
|
||||
|
||||
if h.c.Capabilities.Core == nil {
|
||||
h.c.Capabilities.Core = &data.CapabilitiesCore{}
|
||||
h.c.Capabilities.Core = &ocs.CapabilitiesCore{}
|
||||
}
|
||||
if h.c.Capabilities.Core.PollInterval == 0 {
|
||||
h.c.Capabilities.Core.PollInterval = 60
|
||||
@@ -58,7 +58,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// h.c.Capabilities.Core.SupportURLSigning is boolean
|
||||
|
||||
if h.c.Capabilities.Core.Status == nil {
|
||||
h.c.Capabilities.Core.Status = &data.Status{}
|
||||
h.c.Capabilities.Core.Status = &ocs.Status{}
|
||||
}
|
||||
// h.c.Capabilities.Core.Status.Installed is boolean
|
||||
// h.c.Capabilities.Core.Status.Maintenance is boolean
|
||||
@@ -85,7 +85,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// checksums
|
||||
|
||||
if h.c.Capabilities.Checksums == nil {
|
||||
h.c.Capabilities.Checksums = &data.CapabilitiesChecksums{}
|
||||
h.c.Capabilities.Checksums = &ocs.CapabilitiesChecksums{}
|
||||
}
|
||||
if h.c.Capabilities.Checksums.SupportedTypes == nil {
|
||||
h.c.Capabilities.Checksums.SupportedTypes = []string{"SHA256"}
|
||||
@@ -97,7 +97,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// files
|
||||
|
||||
if h.c.Capabilities.Files == nil {
|
||||
h.c.Capabilities.Files = &data.CapabilitiesFiles{}
|
||||
h.c.Capabilities.Files = &ocs.CapabilitiesFiles{}
|
||||
}
|
||||
|
||||
if h.c.Capabilities.Files.BlacklistedFiles == nil {
|
||||
@@ -108,17 +108,17 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// h.c.Capabilities.Files.Favorites is boolean
|
||||
|
||||
if h.c.Capabilities.Files.Archivers == nil {
|
||||
h.c.Capabilities.Files.Archivers = []*data.CapabilitiesArchiver{}
|
||||
h.c.Capabilities.Files.Archivers = []*ocs.CapabilitiesArchiver{}
|
||||
}
|
||||
|
||||
if h.c.Capabilities.Files.AppProviders == nil {
|
||||
h.c.Capabilities.Files.AppProviders = []*data.CapabilitiesAppProvider{}
|
||||
h.c.Capabilities.Files.AppProviders = []*ocs.CapabilitiesAppProvider{}
|
||||
}
|
||||
|
||||
// dav
|
||||
|
||||
if h.c.Capabilities.Dav == nil {
|
||||
h.c.Capabilities.Dav = &data.CapabilitiesDav{}
|
||||
h.c.Capabilities.Dav = &ocs.CapabilitiesDav{}
|
||||
}
|
||||
if h.c.Capabilities.Dav.Trashbin == "" {
|
||||
h.c.Capabilities.Dav.Trashbin = "1.0"
|
||||
@@ -130,24 +130,24 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// sharing
|
||||
|
||||
if h.c.Capabilities.FilesSharing == nil {
|
||||
h.c.Capabilities.FilesSharing = &data.CapabilitiesFilesSharing{}
|
||||
h.c.Capabilities.FilesSharing = &ocs.CapabilitiesFilesSharing{}
|
||||
}
|
||||
|
||||
// h.c.Capabilities.FilesSharing.APIEnabled is boolean
|
||||
|
||||
if h.c.Capabilities.FilesSharing.Public == nil {
|
||||
h.c.Capabilities.FilesSharing.Public = &data.CapabilitiesFilesSharingPublic{}
|
||||
h.c.Capabilities.FilesSharing.Public = &ocs.CapabilitiesFilesSharingPublic{}
|
||||
}
|
||||
|
||||
// h.c.Capabilities.FilesSharing.IsPublic.Enabled is boolean
|
||||
h.c.Capabilities.FilesSharing.Public.Enabled = true
|
||||
|
||||
if h.c.Capabilities.FilesSharing.Public.Password == nil {
|
||||
h.c.Capabilities.FilesSharing.Public.Password = &data.CapabilitiesFilesSharingPublicPassword{}
|
||||
h.c.Capabilities.FilesSharing.Public.Password = &ocs.CapabilitiesFilesSharingPublicPassword{}
|
||||
}
|
||||
|
||||
if h.c.Capabilities.FilesSharing.Public.Password.EnforcedFor == nil {
|
||||
h.c.Capabilities.FilesSharing.Public.Password.EnforcedFor = &data.CapabilitiesFilesSharingPublicPasswordEnforcedFor{}
|
||||
h.c.Capabilities.FilesSharing.Public.Password.EnforcedFor = &ocs.CapabilitiesFilesSharingPublicPasswordEnforcedFor{}
|
||||
}
|
||||
|
||||
// h.c.Capabilities.FilesSharing.IsPublic.Password.EnforcedFor.ReadOnly is boolean
|
||||
@@ -158,7 +158,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// h.c.Capabilities.FilesSharing.IsPublic.Password.Enforced is boolean
|
||||
|
||||
if h.c.Capabilities.FilesSharing.Public.ExpireDate == nil {
|
||||
h.c.Capabilities.FilesSharing.Public.ExpireDate = &data.CapabilitiesFilesSharingPublicExpireDate{}
|
||||
h.c.Capabilities.FilesSharing.Public.ExpireDate = &ocs.CapabilitiesFilesSharingPublicExpireDate{}
|
||||
}
|
||||
// h.c.Capabilities.FilesSharing.IsPublic.ExpireDate.Enabled is boolean
|
||||
|
||||
@@ -169,7 +169,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// h.c.Capabilities.FilesSharing.IsPublic.SupportsUploadOnly is boolean
|
||||
|
||||
if h.c.Capabilities.FilesSharing.User == nil {
|
||||
h.c.Capabilities.FilesSharing.User = &data.CapabilitiesFilesSharingUser{}
|
||||
h.c.Capabilities.FilesSharing.User = &ocs.CapabilitiesFilesSharingUser{}
|
||||
}
|
||||
|
||||
// h.c.Capabilities.FilesSharing.User.SendMail is boolean
|
||||
@@ -182,7 +182,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// h.c.Capabilities.FilesSharing.ShareWithMembershipGroupsOnly is boolean
|
||||
|
||||
if h.c.Capabilities.FilesSharing.UserEnumeration == nil {
|
||||
h.c.Capabilities.FilesSharing.UserEnumeration = &data.CapabilitiesFilesSharingUserEnumeration{}
|
||||
h.c.Capabilities.FilesSharing.UserEnumeration = &ocs.CapabilitiesFilesSharingUserEnumeration{}
|
||||
}
|
||||
|
||||
// h.c.Capabilities.FilesSharing.UserEnumeration.Enabled is boolean
|
||||
@@ -192,7 +192,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
h.c.Capabilities.FilesSharing.DefaultPermissions = 31
|
||||
}
|
||||
if h.c.Capabilities.FilesSharing.Federation == nil {
|
||||
h.c.Capabilities.FilesSharing.Federation = &data.CapabilitiesFilesSharingFederation{}
|
||||
h.c.Capabilities.FilesSharing.Federation = &ocs.CapabilitiesFilesSharingFederation{}
|
||||
}
|
||||
|
||||
// h.c.Capabilities.FilesSharing.Federation.Outgoing is boolean
|
||||
@@ -205,7 +205,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// notifications
|
||||
|
||||
// if h.c.Capabilities.Notifications == nil {
|
||||
// h.c.Capabilities.Notifications = &data.CapabilitiesNotifications{}
|
||||
// h.c.Capabilities.Notifications = &ocs.CapabilitiesNotifications{}
|
||||
// }
|
||||
// if h.c.Capabilities.Notifications.Endpoints == nil {
|
||||
// h.c.Capabilities.Notifications.Endpoints = []string{"list", "get", "delete"}
|
||||
@@ -214,7 +214,7 @@ func (h *Handler) Init(c *config.Config) {
|
||||
// version
|
||||
|
||||
if h.c.Version == nil {
|
||||
h.c.Version = &data.Version{
|
||||
h.c.Version = &ocs.Version{
|
||||
// TODO get from build env
|
||||
Major: 10,
|
||||
Minor: 0,
|
||||
|
||||
Generated
Vendored
+3
-3
@@ -21,7 +21,7 @@ package capabilities
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/data"
|
||||
"github.com/cs3org/reva/v2/pkg/owncloud/ocs"
|
||||
)
|
||||
|
||||
type chunkProtocol string
|
||||
@@ -32,7 +32,7 @@ var (
|
||||
chunkTUS chunkProtocol = "tus"
|
||||
)
|
||||
|
||||
func (h *Handler) getCapabilitiesForUserAgent(userAgent string) data.CapabilitiesData {
|
||||
func (h *Handler) getCapabilitiesForUserAgent(userAgent string) ocs.CapabilitiesData {
|
||||
if userAgent != "" {
|
||||
for k, v := range h.userAgentChunkingMap {
|
||||
// we could also use a regexp for pattern matching
|
||||
@@ -47,7 +47,7 @@ func (h *Handler) getCapabilitiesForUserAgent(userAgent string) data.Capabilitie
|
||||
return h.c
|
||||
}
|
||||
|
||||
func setCapabilitiesForChunkProtocol(cp chunkProtocol, c *data.CapabilitiesData) {
|
||||
func setCapabilitiesForChunkProtocol(cp chunkProtocol, c *ocs.CapabilitiesData) {
|
||||
switch cp {
|
||||
case chunkV1:
|
||||
// 2.7+ will use Chunking V1 if "capabilities > files > bigfilechunking" is "true" AND "capabilities > dav > chunking" is not there
|
||||
|
||||
Generated
Vendored
+14
-2
@@ -16,7 +16,7 @@
|
||||
// granted to it by virtue of its status as an Intergovernmental Organization
|
||||
// or submit itself to any jurisdiction.
|
||||
|
||||
package data
|
||||
package ocs
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
@@ -42,7 +42,7 @@ func (c ocsBool) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
||||
return e.EncodeElement("0", start)
|
||||
}
|
||||
|
||||
// CapabilitiesData TODO document
|
||||
// CapabilitiesData holds the capabilities data
|
||||
type CapabilitiesData struct {
|
||||
Capabilities *Capabilities `json:"capabilities" xml:"capabilities"`
|
||||
Version *Version `json:"version" xml:"version"`
|
||||
@@ -59,6 +59,7 @@ type Capabilities struct {
|
||||
Graph *CapabilitiesGraph `json:"graph,omitempty" xml:"graph,omitempty" mapstructure:"graph"`
|
||||
PasswordPolicy *CapabilitiesPasswordPolicy `json:"password_policy,omitempty" xml:"password_policy,omitempty" mapstructure:"password_policy"`
|
||||
Search *CapabilitiesSearch `json:"search,omitempty" xml:"search,omitempty" mapstructure:"search"`
|
||||
Theme *CapabilitiesTheme `json:"theme,omitempty" xml:"theme,omitempty" mapstructure:"theme"`
|
||||
Notifications *CapabilitiesNotifications `json:"notifications,omitempty" xml:"notifications,omitempty"`
|
||||
}
|
||||
|
||||
@@ -290,6 +291,17 @@ type CapabilitiesNotifications struct {
|
||||
Endpoints []string `json:"ocs-endpoints,omitempty" xml:"ocs-endpoints>element,omitempty" mapstructure:"endpoints"`
|
||||
}
|
||||
|
||||
// CapabilitiesTheme holds theming capabilities
|
||||
type CapabilitiesTheme struct {
|
||||
Logo *CapabilitiesThemeLogo `json:"logo" xml:"logo" mapstructure:"logo"`
|
||||
}
|
||||
|
||||
// CapabilitiesThemeLogo holds theming logo capabilities
|
||||
type CapabilitiesThemeLogo struct {
|
||||
// xml marshal, unmarshal does not support map[string]string, needs a custom type with MarshalXML and UnmarshalXML implementations
|
||||
PermittedFileTypes map[string]string `json:"permitted_file_types" xml:"-" mapstructure:"permitted_file_types"`
|
||||
}
|
||||
|
||||
// Version holds version information
|
||||
type Version struct {
|
||||
Major int `json:"major" xml:"major"`
|
||||
Reference in New Issue
Block a user