github.com/cs3org/reva/v2@v2.27.7/internal/http/services/owncloud/ocs/handlers/cloud/capabilities/capabilities.go (about) 1 // Copyright 2018-2021 CERN 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 // In applying this license, CERN does not waive the privileges and immunities 16 // granted to it by virtue of its status as an Intergovernmental Organization 17 // or submit itself to any jurisdiction. 18 19 package capabilities 20 21 import ( 22 "net/http" 23 24 "github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/config" 25 "github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/response" 26 "github.com/cs3org/reva/v2/pkg/owncloud/ocs" 27 ) 28 29 // Handler renders the capability endpoint 30 type Handler struct { 31 c ocs.CapabilitiesData 32 defaultUploadProtocol string 33 userAgentChunkingMap map[string]string 34 } 35 36 // Init initializes this and any contained handlers 37 func (h *Handler) Init(c *config.Config) { 38 h.c = c.Capabilities 39 h.defaultUploadProtocol = c.DefaultUploadProtocol 40 h.userAgentChunkingMap = c.UserAgentChunkingMap 41 42 // capabilities 43 if h.c.Capabilities == nil { 44 h.c.Capabilities = &ocs.Capabilities{} 45 } 46 47 // core 48 49 if h.c.Capabilities.Core == nil { 50 h.c.Capabilities.Core = &ocs.CapabilitiesCore{} 51 } 52 if h.c.Capabilities.Core.PollInterval == 0 { 53 h.c.Capabilities.Core.PollInterval = 60 54 } 55 if h.c.Capabilities.Core.WebdavRoot == "" { 56 h.c.Capabilities.Core.WebdavRoot = "remote.php/webdav" 57 } 58 // h.c.Capabilities.Core.SupportURLSigning is boolean 59 60 if h.c.Capabilities.Core.Status == nil { 61 h.c.Capabilities.Core.Status = &ocs.Status{} 62 } 63 // h.c.Capabilities.Core.Status.Installed is boolean 64 // h.c.Capabilities.Core.Status.Maintenance is boolean 65 // h.c.Capabilities.Core.Status.NeedsDBUpgrade is boolean 66 if h.c.Capabilities.Core.Status.Version == "" { 67 h.c.Capabilities.Core.Status.Version = "10.0.11.5" // TODO make build determined 68 } 69 if h.c.Capabilities.Core.Status.VersionString == "" { 70 h.c.Capabilities.Core.Status.VersionString = "10.0.11" // TODO make build determined 71 } 72 if h.c.Capabilities.Core.Status.Edition == "" { 73 h.c.Capabilities.Core.Status.Edition = "community" // TODO make build determined 74 } 75 if h.c.Capabilities.Core.Status.ProductName == "" { 76 h.c.Capabilities.Core.Status.ProductName = "reva" // TODO make build determined 77 } 78 if h.c.Capabilities.Core.Status.Product == "" { 79 h.c.Capabilities.Core.Status.Product = "reva" // TODO make build determined 80 } 81 if h.c.Capabilities.Core.Status.Hostname == "" { 82 h.c.Capabilities.Core.Status.Hostname = "" // TODO get from context? 83 } 84 85 // checksums 86 87 if h.c.Capabilities.Checksums == nil { 88 h.c.Capabilities.Checksums = &ocs.CapabilitiesChecksums{} 89 } 90 if h.c.Capabilities.Checksums.SupportedTypes == nil { 91 h.c.Capabilities.Checksums.SupportedTypes = []string{"SHA256"} 92 } 93 if h.c.Capabilities.Checksums.PreferredUploadType == "" { 94 h.c.Capabilities.Checksums.PreferredUploadType = "SHA1" 95 } 96 97 // files 98 99 if h.c.Capabilities.Files == nil { 100 h.c.Capabilities.Files = &ocs.CapabilitiesFiles{} 101 } 102 103 if h.c.Capabilities.Files.BlacklistedFiles == nil { 104 h.c.Capabilities.Files.BlacklistedFiles = []string{} 105 } 106 // h.c.Capabilities.Files.Undelete is boolean 107 // h.c.Capabilities.Files.Versioning is boolean 108 // h.c.Capabilities.Files.Favorites is boolean 109 110 if h.c.Capabilities.Files.Archivers == nil { 111 h.c.Capabilities.Files.Archivers = []*ocs.CapabilitiesArchiver{} 112 } 113 114 if h.c.Capabilities.Files.AppProviders == nil { 115 h.c.Capabilities.Files.AppProviders = []*ocs.CapabilitiesAppProvider{} 116 } 117 118 // dav 119 120 if h.c.Capabilities.Dav == nil { 121 h.c.Capabilities.Dav = &ocs.CapabilitiesDav{} 122 } 123 if h.c.Capabilities.Dav.Trashbin == "" { 124 h.c.Capabilities.Dav.Trashbin = "1.0" 125 } 126 if h.c.Capabilities.Dav.Reports == nil { 127 h.c.Capabilities.Dav.Reports = []string{} 128 } 129 130 // sharing 131 132 if h.c.Capabilities.FilesSharing == nil { 133 h.c.Capabilities.FilesSharing = &ocs.CapabilitiesFilesSharing{} 134 } 135 136 // h.c.Capabilities.FilesSharing.APIEnabled is boolean 137 138 if h.c.Capabilities.FilesSharing.Public == nil { 139 h.c.Capabilities.FilesSharing.Public = &ocs.CapabilitiesFilesSharingPublic{} 140 } 141 142 // h.c.Capabilities.FilesSharing.IsPublic.Enabled is boolean 143 h.c.Capabilities.FilesSharing.Public.Enabled = true 144 145 if h.c.Capabilities.FilesSharing.Public.Password == nil { 146 h.c.Capabilities.FilesSharing.Public.Password = &ocs.CapabilitiesFilesSharingPublicPassword{} 147 } 148 149 if h.c.Capabilities.FilesSharing.Public.Password.EnforcedFor == nil { 150 h.c.Capabilities.FilesSharing.Public.Password.EnforcedFor = &ocs.CapabilitiesFilesSharingPublicPasswordEnforcedFor{} 151 } 152 153 // h.c.Capabilities.FilesSharing.IsPublic.Password.EnforcedFor.ReadOnly is boolean 154 // h.c.Capabilities.FilesSharing.IsPublic.Password.EnforcedFor.ReadWrite is boolean 155 // h.c.Capabilities.FilesSharing.IsPublic.Password.EnforcedFor.ReadWriteDelete is boolean 156 // h.c.Capabilities.FilesSharing.IsPublic.Password.EnforcedFor.UploadOnly is boolean 157 158 // h.c.Capabilities.FilesSharing.IsPublic.Password.Enforced is boolean 159 160 if h.c.Capabilities.FilesSharing.Public.ExpireDate == nil { 161 h.c.Capabilities.FilesSharing.Public.ExpireDate = &ocs.CapabilitiesFilesSharingPublicExpireDate{} 162 } 163 // h.c.Capabilities.FilesSharing.IsPublic.ExpireDate.Enabled is boolean 164 165 // h.c.Capabilities.FilesSharing.IsPublic.SendMail is boolean 166 // h.c.Capabilities.FilesSharing.IsPublic.SocialShare is boolean 167 // h.c.Capabilities.FilesSharing.IsPublic.Upload is boolean 168 // h.c.Capabilities.FilesSharing.IsPublic.Multiple is boolean 169 // h.c.Capabilities.FilesSharing.IsPublic.SupportsUploadOnly is boolean 170 171 if h.c.Capabilities.FilesSharing.User == nil { 172 h.c.Capabilities.FilesSharing.User = &ocs.CapabilitiesFilesSharingUser{} 173 } 174 175 // h.c.Capabilities.FilesSharing.User.SendMail is boolean 176 177 // h.c.Capabilities.FilesSharing.Resharing is boolean 178 // h.c.Capabilities.FilesSharing.GroupSharing is boolean 179 // h.c.Capabilities.FilesSharing.SharingRoles is boolean 180 // h.c.Capabilities.FilesSharing.AutoAcceptShare is boolean 181 // h.c.Capabilities.FilesSharing.ShareWithGroupMembersOnly is boolean 182 // h.c.Capabilities.FilesSharing.ShareWithMembershipGroupsOnly is boolean 183 184 if h.c.Capabilities.FilesSharing.UserEnumeration == nil { 185 h.c.Capabilities.FilesSharing.UserEnumeration = &ocs.CapabilitiesFilesSharingUserEnumeration{} 186 } 187 188 // h.c.Capabilities.FilesSharing.UserEnumeration.Enabled is boolean 189 // h.c.Capabilities.FilesSharing.UserEnumeration.GroupMembersOnly is boolean 190 191 if h.c.Capabilities.FilesSharing.DefaultPermissions == 0 { 192 h.c.Capabilities.FilesSharing.DefaultPermissions = 31 193 } 194 if h.c.Capabilities.FilesSharing.Federation == nil { 195 h.c.Capabilities.FilesSharing.Federation = &ocs.CapabilitiesFilesSharingFederation{} 196 } 197 198 // h.c.Capabilities.FilesSharing.Federation.Outgoing is boolean 199 // h.c.Capabilities.FilesSharing.Federation.Incoming is boolean 200 201 if h.c.Capabilities.FilesSharing.SearchMinLength == 0 { 202 h.c.Capabilities.FilesSharing.SearchMinLength = 2 203 } 204 205 // notifications 206 207 // if h.c.Capabilities.Notifications == nil { 208 // h.c.Capabilities.Notifications = &ocs.CapabilitiesNotifications{} 209 // } 210 // if h.c.Capabilities.Notifications.Endpoints == nil { 211 // h.c.Capabilities.Notifications.Endpoints = []string{"list", "get", "delete"} 212 // } 213 214 // version 215 216 if h.c.Version == nil { 217 h.c.Version = &ocs.Version{ 218 // TODO get from build env 219 Major: 10, 220 Minor: 0, 221 Micro: 11, 222 String: "10.0.11", 223 Edition: "community", 224 Product: "reva", 225 ProductVersion: "", 226 } 227 } 228 229 // upload protocol-specific details 230 setCapabilitiesForChunkProtocol(chunkProtocol(h.defaultUploadProtocol), &h.c) 231 232 } 233 234 // Handler renders the capabilities 235 func (h *Handler) GetCapabilities(w http.ResponseWriter, r *http.Request) { 236 c := h.getCapabilitiesForUserAgent(r.UserAgent()) 237 response.WriteOCSSuccess(w, r, c) 238 }