* Bounce package.json verison to 0.1.0
* Docs cleanup driven by Vale
* Clarifying language
* Clarify that permissions bit is important
* End of line white space linter warnings
* Straighten what seemed like awkward constructs in prerequisites
* Sync up with `docs/intro.md`
Co-authored-by: Georgi Matev <gmatev@alcion.ai>
fix: docs/package.json & docs/package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-MDXMERMAID-3009151
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
* Logic to validate service/category pairs for paths
* convert string to service or category const
* check that a given service/category pair is a valid resource type
* Add basic tests for validateServiceAndCategory
* Re-add logic for getting Exchange mail paths
Paths can either be for an item (email) or a folder. Returned struct
provides safe access to underlying information in the path once it is
created.
* Refine tests, add struct comment
Add test to make sure Item() and Folder() work properly for a resource
that has no parent folder, just the prefix stuff.
* Rework resource-specific paths based on comments
* use a single type to represent resource specific paths
* use service/category enums to denote the resource the path represents
* update tests to check for service/category of the path
* rename exchange_path*.go -> resource_path*.go
The filters package allows callers to specify both a target
to match on, and behavior of the comparison. While data-
type scopes always equate to "equals", the control over
different comparison behavior is useful for info-type
filters. This change integrates filters into scopes for
built-in control of those comparisons.
Multiple unescaped trailing path separators should be trimmed from input elements so there are no empty elements or trailing unescaped separators at the end of the path or between elements
Turn on now to keep from cycle of fixing most code, waiting for some PRs
in other packages, and then needing to do more fixups. Will slowly
enable on various files in connector package until we get full coverage.
Though enumerated as ints, the selector service
categories are stored and managed as strings. The
only time that we use the int is when passing their
iota const to and from functions. Using a string
type instead of an int allows us to get rid of the
string builders and AtoI funcs (though not the
stringer requirement in the Iface, sadly).
* Clean up tree structure and add proper logo
* Proper logo files
* Initial docs
* Pick up new page after merging main
* Apply suggestions from code review
Some nits
Co-authored-by: Niraj Tolia <ntolia@users.noreply.github.com>
* Quash a bunch of Vale prose linter errors, warnings, and suggestions.
* PR Review feedback
* Simplified mount folders
* Cleaned up windows container
* Hid `latest` release tag
* Review feedback: Link to repo page
* Better arrow symbol
Co-authored-by: Niraj Tolia <ntolia@users.noreply.github.com>
* Clarify sentence
* Update README.md
* Reframing focus to M365
* More linting
* Use only MD files
Co-authored-by: Niraj Tolia <ntolia@users.noreply.github.com>
* Fix wsl lint errors in pkg package
* Fix wsl lint errors in most of internal package
Leave some sub-packages out that have higher churn at the moment.
* Rewrite basic path logic to be simpler
Make basic path logic deal only with path elements instead of elements
and segments. Upper-layer logic can deal with elements.
Base path logic does not require a complete resource path as would be
seen by kopia, it just manages splitting/joining/escaping path elements.
Will have transformers to go from a basic path to a resource specific
path in a follow up.
Remove upper-layer logic for now to reduce load while reviewing as it
also changed slightly. Will be re-added in a follow up
Introduces manual deletion of existing backups. The delete
includes: the modelStore backup, modelStore details, and
the kopia snapshot of the backup itself.
Graph may have an easier time parsing scopes if the root
user is discretely identified, as opposed to being a wildcard.
DiscreteScopes() automatically handles replacement of
scopes matching Any() user with the set of user provided
discrete IDs.
* Update to kopia with required callback
* Support structs for materializing backup details
Kopia will not allow us to pass data to it that should be passed back to
us in the `FinishedFile` callback. To work around this, create a small
thread-safe support struct that handles information about files kopia is
currently processing. Entries are removed from the set when kopia is
done with them and if no error occurred, the item's info will be added
to the BackupDetails.
* Switch to best attempt for iterating through files
Defaulting to "best-attempt" error handling where all data that didn't
result in an error is handed to kopia and then all errors encountered
are returned at the end.
* Test for uploads that have an error
Simple error reading a file. BackupDetails should not contain
information about the file that had the error (needs update to kopia
code and this code to pass). All other files should be present in kopia
and in BackupDetails.
Co-authored-by: Danny <danny@alcion.ai>
Scope production was still using service-type specific
factories instead of a generic factory set. This has been
centralized so that all service instances share the same
scope production concerns.
Additionally, category comparator funcs now use generic
comparators as well, which allows for the removal of the
isType() and includesType() comparator funcs.
Scope filtering is currently hardcoded to the exchange
use case. In order for future work to rely on boilerplate
rather than re-writing the full filtering logic on each new
type, as much of that code as is possible has been moved
into a generic toolset.
Scope filtering is currently hardcoded to the exchange
use case. In order for future work to rely on boilerplate
rather than re-writing the full filtering logic on each new
type, as much of that code as is possible has been moved
into a generic toolset.