Skip to content

Commit

Permalink
Учитывать max-age для cookies #24, Для cookie без пути прописывать зн…
Browse files Browse the repository at this point in the history
…ачение по умолчанию #22
  • Loading branch information
vbondarevsky committed Nov 25, 2019
1 parent c020b02 commit 9ba4fd0
Showing 1 changed file with 43 additions and 9 deletions.
52 changes: 43 additions & 9 deletions src/CommonModules/КоннекторHTTP/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
//
// URL: https://github.com/vbondarevsky/Connector
// e-mail: vbondarevsky@gmail.com
// Версия: 1.3.4
// Версия: 1.3.5
//
// Требования: платформа 1С версии 8.3.10 и выше

Expand Down Expand Up @@ -925,6 +925,16 @@

КонецФункции

Процедура УдалитьCookieИзХранилища(ХранилищеCookies, Cookie)

Если ХранилищеCookies.Получить(Cookie.Домен) <> Неопределено
И ХранилищеCookies[Cookie.Домен].Получить(Cookie.Путь) <> Неопределено
И ХранилищеCookies[Cookie.Домен][Cookie.Путь].Получить(Cookie.Наименование) <> Неопределено Тогда
ХранилищеCookies[Cookie.Домен][Cookie.Путь].Удалить(Cookie.Наименование);
КонецЕсли;

КонецПроцедуры

Процедура ДобавитьCookieВХранилище(ХранилищеCookies, Cookie, Замещать = Ложь)

Если ХранилищеCookies.Получить(Cookie.Домен) = Неопределено Тогда
Expand Down Expand Up @@ -1390,12 +1400,18 @@

Функция ИзвлечьCookies(Заголовки, URL)

ТекущееВремя = ТекущаяУниверсальнаяДата();
Cookies = Новый Соответствие;
Для Каждого ОчереднойЗаголовок Из Заголовки Цикл
Если НРег(ОчереднойЗаголовок.Ключ) = "set-cookie" Тогда
Для Каждого ЗаголовокCookie Из РазбитьНаОтдельныеЗаголовкиCookies(ОчереднойЗаголовок.Значение) Цикл
Cookie = РаспарситьCookie(ЗаголовокCookie, URL);
Если Cookie <> Неопределено Тогда
Cookie = РаспарситьCookie(ЗаголовокCookie, URL, ТекущееВремя);
Если Cookie = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Cookie.СрокДействия <= ТекущееВремя Тогда
УдалитьCookieИзХранилища(Cookies, Cookie);
Иначе
ДобавитьCookieВХранилище(Cookies, Cookie);
КонецЕсли;
КонецЦикла;
Expand Down Expand Up @@ -1427,7 +1443,7 @@
ОтдельныйЗаголовок = ОтдельныйЗаголовок + ЗапчастиЗаголовков[Индекс];
КонецЕсли;
КонецЦикла;
Заголовки.Добавить(ОтдельныйЗаголовок);
Заголовки.Добавить(ОтдельныйЗаголовок);

Возврат Заголовки;

Expand Down Expand Up @@ -1460,7 +1476,7 @@

КонецФункции

Функция РаспарситьCookie(Заголовок, URL)
Функция РаспарситьCookie(Заголовок, URL, ТекущееВремя)

Cookie = Неопределено;
Индекс = 0;
Expand All @@ -1486,6 +1502,10 @@
Cookie.Путь = Значение;
ИначеЕсли Ключ = "secure" Тогда
Cookie.ТолькоБезопасноеСоединение = Истина;
ИначеЕсли Ключ = "max-age" Тогда
ОписаниеТипа = Новый ОписаниеТипов("Число");
Секунды = ОписаниеТипа.ПривестиЗначение(Значение);
Cookie.СрокДействия = ТекущееВремя + Секунды;
Иначе
Продолжить; // INFO: другие параметры пока игнорируются
КонецЕсли;
Expand All @@ -1495,17 +1515,31 @@
Возврат Cookie;
КонецЕсли;

ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL);

Возврат Cookie;

КонецФункции

Процедура ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL)

СтруктураURL = КоннекторHTTP.РазобратьURL(URL);
Если Не ЗначениеЗаполнено(Cookie.Домен) Тогда
Cookie.Домен = СтруктураURL.Сервер;
КонецЕсли;
Если Не ЗначениеЗаполнено(Cookie.Порт) И ЗначениеЗаполнено(СтруктураURL.Порт) Тогда
Cookie.Порт = СтруктураURL.Порт;
КонецЕсли;

Возврат Cookie;

КонецФункции
Если Не ЗначениеЗаполнено(Cookie.Путь) Тогда
ПозицияПоследнегоСлеша = СтрНайти(СтруктураURL.Путь, "/", НаправлениеПоиска.СКонца);
Если ПозицияПоследнегоСлеша <= 1 Тогда
Cookie.Путь = "/";
Иначе
Cookie.Путь = Лев(СтруктураURL.Путь, ПозицияПоследнегоСлеша - 1);
КонецЕсли;
КонецЕсли;

КонецПроцедуры

Функция ПолучитьЗначениеЗаголовка(Заголовок, ВсеЗаголовки, Ключ = Неопределено)

Expand Down

0 comments on commit 9ba4fd0

Please sign in to comment.