29th
Схема первой реализации спредуса
Независимо от того давал пользователь доступ к api спредуса или нет, разработчику всегда доступны кросдоменные запросы: однако при запросах для каждого сайта храниться отдельный набор cookies, таким образом, что если сайт torrentbox.org авторизовался во vkontakte.ru используя email и пароль, которые ввёл сам пользователь для этих сайтов сайт tfgiant.com не сможет получить доступ к данным vkotankte.ru словно tfgiant.com делает запросы в отдельном браузере (или компьютере)
Примерный сценарий взаимодействия
Пользователь с установленным spreadus (ядро + плагин) заходит на произвольный сайт, например http://torrentbox.org. На этой странице заставляет браузер обратится к плагин. Далее js на странице обращается к данному объекту для получения авторизации:
var api_proxy = document.getElementById('sprapi');
var add_torrent = function(link){
var params = {
method: 'add_torrent',
file: link
};
params.signature = sign_params(params, api_proxy.token);
api_proxy.api(params);
};
if (api_proxy.token){
add_torrent('http://torrentbox.org/t/244fba45a');
} else{
var callback = function(token){
add_torrent('http://torrentbox.org/t/244fba45a');
};
api_proxy.getAuth(callback);
}
Если пользователь когда-либо уже давал доступ к api этому сайту, то будет доступно свойство token и вызов api. У npapi есть возможность определять на каком url запущен его объект, и следовательно идентифицировать сайт.
Если пользователь ещё не давал доступ сайту, то сайт запросит авторизацию, а ядро откроет в браузере страницу localhost:500304/getauth/?for=http://torrentbox.org, где пользователь может дать доступ данному сайту к api спредуса. Как только это поизойдёт вызовится callback.
После того как пользователь даёт доступ к api средпуса данному сайту, сайт может добавлять закачки (торренты и файлы в сейти gnutella), управлять списком закачек и их свойствами (свой список для каждого сайта)