Именно так выглядит SSID моей беспроводной сети. Но здесь не об этом. Приложение, упомянутое в предыдущем посте неожиданно для меня стало пользоваться спросом в определенных кругах в качестве примера авторизации с помощью OAuth 2.0. Разобравшись в том, как все работает на клиенте, заинтересовавшиеся разработчики решили на этом не останавливаться и обозначили свой интерес к серверной части. Для того, чтобы упростить понимание, я решил выложить исходники на GitHub, о чем сообщаю уважаемым читателям моего блога настоящим постом.
А вот собственно и сам "серверный код":
Хочу еще раз подчеркнуть, что я писал его что называется "just for fun" и разумеется не принимал во внимание никакие вопросы безопасности.
Предлагаю уважаемому читателю попробовать это чудо-приложение поломать. Некоторые товарищи уже предложили свои варианты, жду успешной реализации.
У кого получится - тот молодец :).
А вот собственно и сам "серверный код":
var sheetId = '1dgq89vY-tyliK112aSUeUCUZP4fvc8PE0hRr_U0j0Ws';
function doGet(e) {
if (!e.parameters.token) {
return ContentService.createTextOutput(JSON.stringify({error: 'Get out!'})).setMimeType(ContentService.MimeType.JSON);
}
var sh = SpreadsheetApp.openById(sheetId).getSheets()[0],
data = sh.getDataRange().getValues(),
user = getUser_(e.parameters.token),
res = user.name ? data : data.map(function(arr) { return arr.slice(3); });
return ContentService.createTextOutput(JSON.stringify(res)).setMimeType(ContentService.MimeType.JSON);
}
function doPost(e) {
if (!e.parameters.token) {
return ContentService.createTextOutput(JSON.stringify({error: 'Get out!'})).setMimeType(ContentService.MimeType.JSON);
}
var user = getUser_(e.parameters.token);
if (!user.name) {
return ContentService.createTextOutput(JSON.stringify({error: 'Get out!'})).setMimeType(ContentService.MimeType.JSON);
}
var sh = SpreadsheetApp.openById(sheetId).getSheets()[0],
data = JSON.parse(e.postData.contents),
values = [new Date(), user.name, user.link, data['for'], data['sum']];
sh.getRange(sh.getLastRow() + 1, 1, 1, 5).setValues([values]);
return ContentService.createTextOutput(JSON.stringify(sh.getDataRange().getValues())).setMimeType(ContentService.MimeType.JSON);
}
function getUser_(token) {
var res = UrlFetchApp.fetch('https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=' + token,
{muteHttpExceptions: true});
return JSON.parse(res);
}
Хочу еще раз подчеркнуть, что я писал его что называется "just for fun" и разумеется не принимал во внимание никакие вопросы безопасности.
Предлагаю уважаемому читателю попробовать это чудо-приложение поломать. Некоторые товарищи уже предложили свои варианты, жду успешной реализации.
У кого получится - тот молодец :).

Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации