{"action":"created","issue":{"url":"https://api.github.com/repos/owncloud/core/issues/15914","labels_url":"https://api.github.com/repos/owncloud/core/issues/15914/labels{/name}","comments_url":"https://api.github.com/repos/owncloud/core/issues/15914/comments","events_url":"https://api.github.com/repos/owncloud/core/issues/15914/events","html_url":"https://github.com/owncloud/core/pull/15914","id":71578403,"number":15914,"title":"Introduce BackendService for managing external storage backends","user":{"login":"Xenopathic","id":2016878,"avatar_url":"https://avatars.githubusercontent.com/u/2016878?v=3","gravatar_id":"","url":"https://api.github.com/users/Xenopathic","html_url":"https://github.com/Xenopathic","followers_url":"https://api.github.com/users/Xenopathic/followers","following_url":"https://api.github.com/users/Xenopathic/following{/other_user}","gists_url":"https://api.github.com/users/Xenopathic/gists{/gist_id}","starred_url":"https://api.github.com/users/Xenopathic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Xenopathic/subscriptions","organizations_url":"https://api.github.com/users/Xenopathic/orgs","repos_url":"https://api.github.com/users/Xenopathic/repos","events_url":"https://api.github.com/users/Xenopathic/events{/privacy}","received_events_url":"https://api.github.com/users/Xenopathic/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/owncloud/core/labels/3%20-%20To%20Review","name":"3 - To Review","color":"ededed"},{"url":"https://api.github.com/repos/owncloud/core/labels/app:files_external","name":"app:files_external","color":"02d7e1"},{"url":"https://api.github.com/repos/owncloud/core/labels/enhancement","name":"enhancement","color":"02e10c"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/owncloud/core/milestones/37","html_url":"https://github.com/owncloud/core/milestones/8.2-current","labels_url":"https://api.github.com/repos/owncloud/core/milestones/37/labels","id":993629,"number":37,"title":"8.2-current","description":"","creator":{"login":"craigpg","id":160667,"avatar_url":"https://avatars.githubusercontent.com/u/160667?v=3","gravatar_id":"","url":"https://api.github.com/users/craigpg","html_url":"https://github.com/craigpg","followers_url":"https://api.github.com/users/craigpg/followers","following_url":"https://api.github.com/users/craigpg/following{/other_user}","gists_url":"https://api.github.com/users/craigpg/gists{/gist_id}","starred_url":"https://api.github.com/users/craigpg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/craigpg/subscriptions","organizations_url":"https://api.github.com/users/craigpg/orgs","repos_url":"https://api.github.com/users/craigpg/repos","events_url":"https://api.github.com/users/craigpg/events{/privacy}","received_events_url":"https://api.github.com/users/craigpg/received_events","type":"User","site_admin":false},"open_issues":641,"closed_issues":398,"state":"open","created_at":"2015-02-24T16:19:37Z","updated_at":"2015-08-19T09:52:21Z","due_on":"2015-10-20T04:00:00Z","closed_at":null},"comments":69,"created_at":"2015-04-28T12:37:23Z","updated_at":"2015-08-19T11:19:19Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/owncloud/core/pulls/15914","html_url":"https://github.com/owncloud/core/pull/15914","diff_url":"https://github.com/owncloud/core/pull/15914.diff","patch_url":"https://github.com/owncloud/core/pull/15914.patch"},"body":"Backends are registered to the BackendService through new data structures:\r\n\r\nBackendConfig specifies the basic information for a backend: class, human-readable name, visibility to personal/admin, initial priority. It takes an array of BackendParameter's to specifiy the parameters\r\n\r\nBackendParameter stores a parameter configuration for an external storage: name of parameter, human-readable name, type of parameter (text, password, hidden, checkbox), flags (optional or not).\r\n\r\nWhen a BackendConfig has checkDependencies() called on it, it will return a (possibly empty) array of BackendDependency's that specify a dependency of the backend. If an empty array is returned it means there are no unhandled dependencies, so the backend can be used.\r\n\r\nStorages in the StoragesController now get their parameters validated server-side (fixes a TODO).\r\n\r\nTODO:\r\n\r\n- [x] Unit tests\r\n- [x] Fix the Local storage type appearing in 'allow user mounts' (but cannot be selected)\r\n- [x] Ask devs if the API is good\r\n- [x] Integrate hooks (at least login)\r\n- [x] Convert all existing storages to authentication methods\r\n- [x] Migrate SMB_OC to SMB + OC auth method\r\n- [x] Migrate OpenStack to OpenStack + Rackspace separate authentication methods\r\n- [x] Check custom JS backends still work\r\n- [x] Check custom JS auth methods work\r\n- [x] Check multi-auth method backends allow all to be configured\r\n\r\ncc @PVince81 @icewind1991 @DeepDiver1975 "},"comment":{"url":"https://api.github.com/repos/owncloud/core/issues/comments/132551886","html_url":"https://github.com/owncloud/core/pull/15914#issuecomment-132551886","issue_url":"https://api.github.com/repos/owncloud/core/issues/15914","id":132551886,"user":{"login":"PVince81","id":277525,"avatar_url":"https://avatars.githubusercontent.com/u/277525?v=3","gravatar_id":"","url":"https://api.github.com/users/PVince81","html_url":"https://github.com/PVince81","followers_url":"https://api.github.com/users/PVince81/followers","following_url":"https://api.github.com/users/PVince81/following{/other_user}","gists_url":"https://api.github.com/users/PVince81/gists{/gist_id}","starred_url":"https://api.github.com/users/PVince81/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PVince81/subscriptions","organizations_url":"https://api.github.com/users/PVince81/orgs","repos_url":"https://api.github.com/users/PVince81/repos","events_url":"https://api.github.com/users/PVince81/events{/privacy}","received_events_url":"https://api.github.com/users/PVince81/received_events","type":"User","site_admin":false},"created_at":"2015-08-19T11:19:19Z","updated_at":"2015-08-19T11:19:19Z","body":":+1:"}}