{"action":"created","issue":{"url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/issues/315","repository_url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension","labels_url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/issues/315/labels{/name}","comments_url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/issues/315/comments","events_url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/issues/315/events","html_url":"https://github.com/AdguardTeam/AdguardBrowserExtension/issues/315","id":169427217,"number":315,"title":"Cloud sync protocol","user":{"login":"ameshkov","id":5947035,"avatar_url":"https://avatars.githubusercontent.com/u/5947035?v=3","gravatar_id":"","url":"https://api.github.com/users/ameshkov","html_url":"https://github.com/ameshkov","followers_url":"https://api.github.com/users/ameshkov/followers","following_url":"https://api.github.com/users/ameshkov/following{/other_user}","gists_url":"https://api.github.com/users/ameshkov/gists{/gist_id}","starred_url":"https://api.github.com/users/ameshkov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ameshkov/subscriptions","organizations_url":"https://api.github.com/users/ameshkov/orgs","repos_url":"https://api.github.com/users/ameshkov/repos","events_url":"https://api.github.com/users/ameshkov/events{/privacy}","received_events_url":"https://api.github.com/users/ameshkov/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/labels/Enhancement","name":"Enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":{"login":"Mizzick","id":13855288,"avatar_url":"https://avatars.githubusercontent.com/u/13855288?v=3","gravatar_id":"","url":"https://api.github.com/users/Mizzick","html_url":"https://github.com/Mizzick","followers_url":"https://api.github.com/users/Mizzick/followers","following_url":"https://api.github.com/users/Mizzick/following{/other_user}","gists_url":"https://api.github.com/users/Mizzick/gists{/gist_id}","starred_url":"https://api.github.com/users/Mizzick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mizzick/subscriptions","organizations_url":"https://api.github.com/users/Mizzick/orgs","repos_url":"https://api.github.com/users/Mizzick/repos","events_url":"https://api.github.com/users/Mizzick/events{/privacy}","received_events_url":"https://api.github.com/users/Mizzick/received_events","type":"User","site_admin":false},"assignees":[{"login":"Mizzick","id":13855288,"avatar_url":"https://avatars.githubusercontent.com/u/13855288?v=3","gravatar_id":"","url":"https://api.github.com/users/Mizzick","html_url":"https://github.com/Mizzick","followers_url":"https://api.github.com/users/Mizzick/followers","following_url":"https://api.github.com/users/Mizzick/following{/other_user}","gists_url":"https://api.github.com/users/Mizzick/gists{/gist_id}","starred_url":"https://api.github.com/users/Mizzick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mizzick/subscriptions","organizations_url":"https://api.github.com/users/Mizzick/orgs","repos_url":"https://api.github.com/users/Mizzick/repos","events_url":"https://api.github.com/users/Mizzick/events{/privacy}","received_events_url":"https://api.github.com/users/Mizzick/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/milestones/8","html_url":"https://github.com/AdguardTeam/AdguardBrowserExtension/milestones/2.5","labels_url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/milestones/8/labels","id":1612508,"number":8,"title":"2.5","description":"Filters and user settings cloud sync.","creator":{"login":"Mizzick","id":13855288,"avatar_url":"https://avatars.githubusercontent.com/u/13855288?v=3","gravatar_id":"","url":"https://api.github.com/users/Mizzick","html_url":"https://github.com/Mizzick","followers_url":"https://api.github.com/users/Mizzick/followers","following_url":"https://api.github.com/users/Mizzick/following{/other_user}","gists_url":"https://api.github.com/users/Mizzick/gists{/gist_id}","starred_url":"https://api.github.com/users/Mizzick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mizzick/subscriptions","organizations_url":"https://api.github.com/users/Mizzick/orgs","repos_url":"https://api.github.com/users/Mizzick/repos","events_url":"https://api.github.com/users/Mizzick/events{/privacy}","received_events_url":"https://api.github.com/users/Mizzick/received_events","type":"User","site_admin":false},"open_issues":36,"closed_issues":7,"state":"open","created_at":"2016-02-29T16:15:09Z","updated_at":"2016-09-02T10:24:19Z","due_on":"2016-10-27T18:30:00Z","closed_at":null},"comments":14,"created_at":"2016-08-04T17:16:45Z","updated_at":"2016-09-02T12:30:09Z","closed_at":null,"body":"I could add this task to any repo as it concerns all our products. Anyway, let's do it here. First of all we should start with developing sync protocol.\r\n\r\nBasically, sync is an import/export of AG settings from a file stored somewhere. We will allow user to sync through a number of \"sync providers\":\r\n1. Chrome/FF storage sync\r\n2. Dropbox/OneDrive/iCloud/Yandex.Drive/etc\r\n3. Adguard personal account\r\n\r\nThe second challenge is the number of products we have. We should allow syncing between AG for Windows, Mac, Android, iOS and browser extensions. All are slightly different.\r\n\r\nAlso we should take into account, that different versions of the same product may be incompatible.\r\n\r\nI suppose this documentation may be useful:\r\nhttps://www.objc.io/issues/10-syncing-data/sync-case-study/\r\n\r\n#### What I'd like to be synced\r\n\r\n**User filter**\r\nThis is the easiest thing, we can simply sync it for all AG products.\r\n\r\n**Whitelist**\r\nAG for Windows, Mac and iOS do not have a whitelist (all exceptions are stored inside of the user filter). On the contrary, AG for Android and browser extensions have it. It is pretty easy to convert a whitelist entry into a filter rule. But here is a thing making everything complicated: \"inverted whitelist\" mode.\r\n\r\n**Ad blocking filters**\r\nThe list of enabled filters.\r\n\r\nHowever, there are some issues with it.\r\n1. iOS and Safari has \"Safari filter\" enabled by default which we do not need in other AG versions. So we should allow user to choose filters which are not synced.\r\n2. iOS, Safari and Android have \"use mobile filters\" option checked. It is not required in other products. I suppose we simply should not sync it.\r\n3. iOS and Safari may hit the rules limit easily.\r\n4. Custom filter subscriptions. Currently only AG for Windows allows adding custom filters by URL. So these filter subscriptions must be ignored by other products. However these subscriptions should be synced between Windows apps.\r\n\r\n**Browsing security**\r\nBrowsing security options.\r\n\r\nThis is a paid feature in Android, so it should not be synced. Although, I suppose we could make sync a paid feature as well:).\r\n\r\n**General settings**\r\nIt depends on AG version which settings are available for sync. For the browser extension it could be:\r\n* Activate the most appropriate filters automatically\r\n* Indicate the number of blocked ads on the Adguard extension icon\r\n* Allow useful ads\r\n* Invert whitelist\r\n\r\n**Stealth mode**\r\nCurrently it is present in AG for Windows only. Please note that it depends on AG version which features are available.\r\n\r\n**Extensions**\r\nCurrently it is present in AG for Windows only. Please note that it depends on AG version which features are available.\r\n\r\n**Parental Control**\r\nCurrently it is present in AG for Windows only. **In fact I don't think we should sync this.**"},"comment":{"url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/issues/comments/244361504","html_url":"https://github.com/AdguardTeam/AdguardBrowserExtension/issues/315#issuecomment-244361504","issue_url":"https://api.github.com/repos/AdguardTeam/AdguardBrowserExtension/issues/315","id":244361504,"user":{"login":"Stillness-2","id":12689,"avatar_url":"https://avatars.githubusercontent.com/u/12689?v=3","gravatar_id":"","url":"https://api.github.com/users/Stillness-2","html_url":"https://github.com/Stillness-2","followers_url":"https://api.github.com/users/Stillness-2/followers","following_url":"https://api.github.com/users/Stillness-2/following{/other_user}","gists_url":"https://api.github.com/users/Stillness-2/gists{/gist_id}","starred_url":"https://api.github.com/users/Stillness-2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Stillness-2/subscriptions","organizations_url":"https://api.github.com/users/Stillness-2/orgs","repos_url":"https://api.github.com/users/Stillness-2/repos","events_url":"https://api.github.com/users/Stillness-2/events{/privacy}","received_events_url":"https://api.github.com/users/Stillness-2/received_events","type":"User","site_admin":false},"created_at":"2016-09-02T12:30:09Z","updated_at":"2016-09-02T12:30:09Z","body":"Settings from MacOS:\r\n\r\n- \"Activate filters automatically\" (autodetect-filters)\r\n- List of the active filters\r\n- \"Use Adguard Assistant\"\r\n- \"Use Adguard Popup Blocker\"\r\n- \"Use Web of Trust extension\"\r\n- SSL Exceptions\r\n- User filter rules\r\n- List of filtered Applications\r\n\r\nSettings from iOS:\r\n\r\n- List of the active filters\r\n- \"Use Simplified Filters\"\r\n- \"Use Adguard Assistant\"\r\n- \"Use Adguard Popup Blocker\"\r\n- \"Use Web of Trust extension\"\r\n- SSL Exceptions\r\n- User filter rules\r\n- List of filtered Applications\r\n"}}
{"actor":{"display_login":"Stillness-2"}}