From 5abc237ac6988cfe7c705f74b29384e6df97bf30 Mon Sep 17 00:00:00 2001 From: Danny Adams Date: Fri, 20 Jan 2023 18:14:16 -0500 Subject: [PATCH] Updates to /cli/backup/sharepoint.go Adds functionality for Selecting SharePoint Page as a data selector. --- src/cli/backup/sharepoint.go | 46 +++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/src/cli/backup/sharepoint.go b/src/cli/backup/sharepoint.go index d5624380f..d2fa81a00 100644 --- a/src/cli/backup/sharepoint.go +++ b/src/cli/backup/sharepoint.go @@ -27,9 +27,12 @@ import ( // setup and globals // ------------------------------------------------------------------------------------------------ +// sharePoint bucket info from flags var ( libraryItems []string libraryPaths []string + pageFolders []string + page []string site []string weburl []string @@ -38,6 +41,7 @@ var ( const ( dataLibraries = "libraries" + dataPages = "pages" ) const ( @@ -93,7 +97,7 @@ func addSharePointCommands(cmd *cobra.Command) *cobra.Command { fs.StringSliceVar( &sharepointData, utils.DataFN, nil, - "Select one or more types of data to backup: "+dataLibraries+".") + "Select one or more types of data to backup: "+dataLibraries+" or "+dataPages+".") options.AddOperationFlags(c) case listCommand: @@ -128,11 +132,16 @@ func addSharePointCommands(cmd *cobra.Command) *cobra.Command { fs.StringArrayVar(&site, utils.SiteFN, nil, - "Backup SharePoint data by site ID; accepts '"+utils.Wildcard+"' to select all sites.") + "Select backup details by site ID; accepts '"+utils.Wildcard+"' to select all sites.") fs.StringSliceVar(&weburl, utils.WebURLFN, nil, - "Restore data by site webURL; accepts '"+utils.Wildcard+"' to select all sites.") + "Select backup data by site webURL; accepts '"+utils.Wildcard+"' to select all sites.") + + fs.StringSliceVar( + &pageFolders, + utils.PageFN, nil, + "Select backup data by site ID; accepts '"+utils.Wildcard+"' to select all sites.") // info flags @@ -179,7 +188,7 @@ func createSharePointCmd(cmd *cobra.Command, args []string) error { return nil } - if err := validateSharePointBackupCreateFlags(site, weburl); err != nil { + if err := validateSharePointBackupCreateFlags(site, weburl, sharepointData); err != nil { return err } @@ -200,7 +209,7 @@ func createSharePointCmd(cmd *cobra.Command, args []string) error { return Only(ctx, errors.Wrap(err, "Failed to connect to Microsoft APIs")) } - sel, err := sharePointBackupCreateSelectors(ctx, site, weburl, gc) + sel, err := sharePointBackupCreateSelectors(ctx, site, weburl, sharepointData, gc) if err != nil { return Only(ctx, errors.Wrap(err, "Retrieving up sharepoint sites by ID and WebURL")) } @@ -250,7 +259,7 @@ func createSharePointCmd(cmd *cobra.Command, args []string) error { return nil } -func validateSharePointBackupCreateFlags(sites, weburls []string) error { +func validateSharePointBackupCreateFlags(sites, weburls, data []string) error { if len(sites) == 0 && len(weburls) == 0 { return errors.New( "requires one or more --" + @@ -260,13 +269,21 @@ func validateSharePointBackupCreateFlags(sites, weburls []string) error { ) } + for _, d := range data { + if d != dataLibraries && d != dataPages { + return errors.New( + d + "is an unrecognized data type; either " + dataLibraries + "or " + dataPages, + ) + } + } + return nil } // TODO: users might specify a data type, this only supports AllData(). func sharePointBackupCreateSelectors( ctx context.Context, - sites, weburls []string, + sites, weburls, data []string, gc *connector.GraphConnector, ) (*selectors.SharePointBackup, error) { if len(sites) == 0 && len(weburls) == 0 { @@ -297,7 +314,20 @@ func sharePointBackupCreateSelectors( } sel := selectors.NewSharePointBackup(union) - sel.Include(sel.AllData()) + if len(data) == 0 { + sel.Include(sel.AllData()) + + return sel, nil + } + + for _, d := range data { + switch d { + case dataLibraries: + sel.Include(sel.Libraries(selectors.Any())) + case dataPages: + sel.Include(sel.Pages(selectors.Any())) + } + } return sel, nil }