fedor57 / alumni-auth Goto Github PK
View Code? Open in Web Editor NEWApp to exchange alumni autherntication codes
App to exchange alumni autherntication codes
Сабж. Это нетрудно сделать простым миграционным скриптом — не из двух слов состоит всего несколько имён. Одновременно это надо сделать на sch57.ru
(мне).
#Основное API
На входе:
На выходе массив для кодов:
В массив добавляются подозрительные, если есть, или топовые для данного пользователя. (*) - делаем потом.
Ситуация:
У меня введено два кода, помимо активного, — A и B, так что
session['codes']
=['A', 'B']
. У меня открыто две вкладки, и я хоту отключить A.В первой вкладке я вижу включённый A, нажимаю «отключить»; откключается A. Проходит немного времени, я забываю всю эту историю.
Натыкаюсь на вторую вкладку, вижу там включённый A, считаю, что мне показалось, и снова нажимаю «отключить»; отключается B.
Это можно решить, отключая код по коду, а не по его индексу в session['codes']
, но тогда в коде странице будет написан код в полном виде, что не айс. Передавать номер и обфусцированный (safe_form
) вид кода для проверки?
route
направляется на views.index
, который его не обрабатывает.views.index
страница, спрашивающая «Хотите войти как такой-то?». У гугла похожая страничка есть, например.Referer
.views.index
обработка POSTа логина. (Надо внимательно прочитать, не сливает ли этот код какую-нибудь инфу timing-атакам.)У нас есть минимум 3 места, где могут использоваться коды:
Делаем так, чтобы внешние API проверки кода в момент персонального использования передавали идентификатор приложения.
После каждой проверки через API или при входе в alumni-auth обновляем новое поле в таблице кодов "дата последнего использования", а также - "id приложения последнего использования".
Эта информация саммаризуется и показывается рядом с кодами в интерфейсе alumni-auth. Информация выводится как для самого кода, так и для временных кодов приложений, которые к нему привязаны. При выводе показываем одно или несколько приложений в виде названия с гиперссылкой и "датой".
«Продиктовать по телефону», написать на бумажке и другие low-tech варианты передачи кода мне очень хотелось бы поддерживать, но для этого цифры надо погруппировать.
@fedor57 говорит, что коды и так слишком длинные. Хорошо, не спорю, давайте искать, как укоротить.
Нужен ли префикс 57-
хоть для чего-нибудь, кроме примера с lyc-
на главной?
Обязательно ли коды должны быть числовыми, или можно и буквенные? (Не обязательно весь алфавит, можно без неудобных пар вроде I/1, O/0).
Отвечаю сам себе: числовые как раз диктовать сильно удобнее, хотя вводить — пофиг. Но буквенные могут быть короче (10^16 < 32^11 для алфавита в 8 цифр и 24 буквы). Пример популярного буквенного кода — SWIFT/BIC.
Зачем ещё может быть интересно укоротить код: добавить контрольные цифры, чтобы можно было с уверенностью говорить юзеру, когда он просто опечатался (полезно ли это? в ISBN, IBAN, кредитках, &c. такое есть).
В данных появляется новый вид кодов "временные коды для приложений". Эти коды можно использовать каждый только в своем приложении, с их помощью нельзя обращаться к другим, приглашать выпускников и пр.
Подробное описание на wiki:
https://github.com/fedor57/alumni-auth/wiki/TempAppCodesSpec
Написать Google Apps скрипт для Google Forms, который принимает "оригинальный" код, дергает API, получает маскированный оригинальный код и временный для приложения, записывает оба кода в поля Google Forms.
codes
), а инвайт — это акт генерации кода для чужого человека, он же стрелка графа (т. е. эндпойнт приложения должен называться /invites/
, как и сейчас)invite_links
на самом деле не ссылки, как я в первый момент подумал, а стрелки графа; поскольку в каждый код входит не больше одной стрелки, непонятно, зачем вообще они нужны (а не дополнительные аккуратно проиндексированные поля в invites
)./invites/new
вообще называются invitee
(имя человека, не используется!) и alumni_id
(его ID).Скрипт на Питоне выгружает Excel-таблицу с результатами голосования, дергает batch-API для батч-проверки кодов. Дергает другую таблицу с результатами ручной допроверки голосов. Группирует по выпускникам, считает результаты, выводит список голосов для проверки.
Дополнительная функциональность:
Нам нужно раскопать тему скриптов для Google Apps в применении к гуглоформам. Сценарий примерно такой:
На этапе разработки макета лучше не требовать реального API и реальной формы для голосования, а тренироваться на кошках. Исправить формирование запроса, парсинг ответа и выбор поля для заполнения мы потом быстро сможем на этапе интеграции.
Можно сделать самостоятельно гуглоформу из одного шага и одного поля для кода. Можно отсылать запросы на какой-нибудь ajax-сервер через POST, например, вот этот
Не важно, что это левое API и там нет нужных данных, главное, будет референсный код.
Делаем более удобный интерфейс, решающий задачу:
https://github.com/fedor57/alumni-auth/wiki/AlumniSelectFormSpec
P.S. В будущем добавим признак "есть в директории"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.