If the backend was changed in the config, the user from the old backend
would be passed to the new backend, which could cause errors if the
format was different.
Before, if the CMS was loading user OAuth credentials from
`localStorage`, then user write access would not be checked again.
However, the `config.yml` repo could be changed, which would cause the
user to be still logged in even if they did not have write permissions.
Also, if the user had updated their metadata (avatar, etc.), the CMS
would not update that either.
When Netlify CMS uses the git-gateway backend, it will check for a
window.netlifyIdentity
object and use that to handle the whole auth flow.
This also sets defaults for the git-gateway endpoint, that means it
can be used in templates with zero configuration and fit with a
one-click deploy to Netlify approach.
Netlify Identity itself is based on our open-source GoTrue microservice,
and Netlify's Git Gateway project is completely open-source as well.
The git-gateway backend will work with Netlify without any setup, but can
also be configured to work with any selfhosted GoTrue and Git Gateway
instances.
`isCollaborator` was created in #491 to block login if a user did not have write (push) permissions to a repo, by going through the list of a users repos until it found the right one. It did not institute pagination, however, so if a user had enough repos that the one in question was on another page, the CMS would assume that they did not have permission and block the login.
This commit fixes the problem by calling the API for the specific repo instead of getting the whole list.
Deletion was added in #485, but the function for the `test-repo` backend
was `deleteEntry` instead of `deleteFile` like it was supposed to be.
Also, setting the key for a deleted file to `undefined` did not really
remove that file from the object, so there were then errors stating
`file.content` is not defined. `delete`ing the "file" from the object
fixes this bug.
For example purposes, its helpful to allow users to run the test
backend without creating a repo object with nested objects for
each folder. This fix creates empty objects wherever needed.