Сегодня немного доработал компонент для аутентификации пользователя в различны сервисах Google. В основном изменения коснулись исправления небольших недочетов в работе компонента.
Так, при смене названия приложения (свойство Source) новое название приложения присваивалось полю Service в результате чего, при повторной аутентификации могла возникнуть исключительная ситуация.
Убраны лишние модули из секции uses в результате чего компонент немного «похудел».
Все константы, используемые при анализе результата логина были вынесены в раздел const.
И наконец, переписан код, касающийся работы со свойством Service. Напомню для чего это поле использовалось.
Дело в том, что при аутентификации в любом сервисе Google необходимо указать его идентификатор (параметр service в запросе). Так, сервис «Календарь» имеет идентификатор cl, Google Analytics — analytics и т.д. Если же Вам не известно какой из сервисов запросит пользователь, то допускается использовать идентификатор xapi.
Так вот в старой версии компонента GoogleLogin поле Service представляло собой простую строку (string) и, я не исключаю такой возможности, кто-то мог занести в это поле не то, что требуется. Например, вместо cl записать celendar и т.д. Что опять же могло привести к ошибке аутентификации или просьбе ввести каптчу.
Сейчас поле Service определяется перечисляемым типом TServices, который содержит все доступные на данный момент идентификаторы сервисов, включая последние разработки Google API, такие как SiteWiki и т.д.
Также в архиве с компонентом обновлена программа демонстрирующая работу компонента.
Скачать обновленный компонент можно со страницы Downloads проекта DelphiCalendar. В общем скачивайте, устанавливайте и пользуйтесь на здоровье :).
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Не актуально
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Что мы как-то не в ногу идем )))
Я тоже начал переделывать его
Кого? Я ещё ничего не закидывал в репозиторий. Ща в группе всй распишем :)
Скажите — для меня остается загадкой: что означает слово celendar? сначала думал — опечатка! Но судя по настойчивости, с которой оно используется — наверное, есть какой то смысл в этом слове. Если имелось ввиду «Календарь», то он пишется cAlendar.
Конечно есть смысл. Это как слово «матраЦ», который разрешили писать как матраС, только потому, что лингвисты запарились тыкать носом безграмотных в словарь Даля. Глядиш и calendar начнут писать как celendar :). А если серьезно, то смысл есть, более того где-то в блоге есть Synapse и Synapce и ещё парочка похожих слов и словосочетаний.
Ну народ вы прям как черепашки низя
как к вам не зайду у вас всё Гугл Логин
уж пора бы чёнить поинтереснее
Ксати идея и вопрос задно
кто встречал Java2Delphi конветрет?
я както скачал с какогото азиатского сайта, он свой пример то перегоняет а вот чтото серьезное уже рычит
Просто уже на C и Java есть готовые модули
если их быстро перегнать в Delphi то я думаю продуктивность вашей работы возрастёт
Java2Delphi не встречал. А по поводу «по-интереснее» так оно есть :) точнее готовится быть — надо доработать немного примеры, протестить. Другое дело, что интересно конкретно для Вас?
Хотел написать Ниньзя а вышло
файлик назывался
java2delphi.20070629.zip
Народ нашел небольшой баг, если в пароле к почте есть спец символы типа «?»,то логин не проходит, фикс закодировать пассворд спомощью HtmlEncode.
function GetParamStr: string;
var
Size: Cardinal;
lencurl: cardinal;
CanonicalURL: string;
begin
if Length(Trim(FLogintoken))>0 then //в результате прошлого запроса получена каптча
begin
Result:=Format(ParamStrCaptcha,[GetEnumName(TypeInfo(TAccountType),Ord(FAccountType)),
FEmail,
HTTPEncode(FPassword),
GetEnumName(TypeInfo(TServices),Ord(FService)),
FSource,
FLoginToken,
LoginCaptcha]);
end
else
Result:=Format(ParamString,[GetEnumName(TypeInfo(TAccountType),Ord(FAccountType)),
FEmail,
HTTPEncode(FPassword),
GetEnumName(TypeInfo(TServices),Ord(FService)),
FSource]);
end;
Виталий, спасибо за информацию. Этот баг пофиксеный на GitHub лежит вроде бы (в последнее время компонент дорабатывал другой человек).
Еще, вдруг кому-нибудь понадобиться… SID, LSID
if pos(‘SID’, UpperCase(List[i])) = 0 then
FSID := Trim(copy(List[i], pos(‘=’, List[i]) + 1, Length(List[i]) —
pos(‘=’, List[i])))
else if pos(‘LSID’, UpperCase(List[i])) = 0 then
FLSID := Trim(copy(List[i], pos(‘=’, List[i]) + 1, Length(List[i]) —
pos(‘=’, List[i])))
Всегда выполниться первый IF, так как LSID включает в себя SID, fix — 0 заменить на 1