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  }