{"id":444837,"date":"2025-01-13T15:03:14","date_gmt":"2025-01-13T15:03:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=444837"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=444837","title":{"rendered":"<span>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0438\u0437 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u0432 1C \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 OpenIDM<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0442\u0440\u0443\u0434\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e. \u041d\u0435 \u0440\u0430\u0437 \u0438 \u043d\u0435 \u0434\u0432\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0435\u043b\u044f\u043c\u0438 \u0436\u0434\u0443\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0442\u0435\u0440\u044f\u0435\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 &#8212; \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044e. OpenIDM \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 OpenIDM \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043a\u0430\u0437\u044b \u0438\u0437 1\u0421, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u043e\u043b\u0438. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443. \u041f\u0440\u0438 \u043a\u0430\u0434\u0440\u043e\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 &#8212; \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0440\u043e\u043b\u044c, \u0430 \u043f\u0440\u0438 \u0443\u0432\u043e\u043b\u044c\u043d\u0435\u043d\u0438\u0438 &#8212; \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 1\u0421<\/h3>\n<p>\u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 OpenIDM \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HTTP \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c JSON \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u043c \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043c. \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e, \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044f \u0432\u0441\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/578\/873\/d20\/578873d20a5487f08ca1f7ef049e0e72.png\" alt=\"HTTP \u0421\u0435\u0440\u0432\u0438\u0441 1\u0421\" width=\"305\" height=\"100\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/578\/873\/d20\/578873d20a5487f08ca1f7ef049e0e72.png\"\/><\/p>\n<div><figcaption>HTTP \u0421\u0435\u0440\u0432\u0438\u0441 1\u0421<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f 1\u0421 \u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>HTTPIDM\u0421\u0435\u0440\u0432\u0438\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"1c\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0428\u0430\u0431\u043b\u043e\u043dURL\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\u0417\u0430\u043f\u0440\u043e\u0441)      \u041c\u0430\u0441\u0441\u0438\u0432 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u041d\u0430\u0422\u0435\u043a\u0443\u0449\u0443\u044e\u0414\u0430\u0442\u0443();     \u0421\u0442\u0440\u043e\u043a\u0430JSON = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cJSON(\u041c\u0430\u0441\u0441\u0438\u0432);          \u041e\u0442\u0432\u0435\u0442 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cHTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442();     \u041e\u0442\u0432\u0435\u0442.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0422\u0435\u043b\u043e\u0418\u0437\u0421\u0442\u0440\u043e\u043a\u0438(\u0421\u0442\u0440\u043e\u043a\u0430JSON);          \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041e\u0442\u0432\u0435\u0442; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0428\u0430\u0431\u043b\u043e\u043dURL\u041f\u0440\u0438\u043a\u0430\u0437\u044b\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\u0417\u0430\u043f\u0440\u043e\u0441)       getLatest = \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\u0417\u0430\u043f\u0440\u043e\u0441\u0430.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\"getLatest\");     \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437 = getLatest = \"true\";     date = \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\u0417\u0430\u043f\u0440\u043e\u0441\u0430.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\"date\");     \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430 = \u0414\u0430\u0442\u0430(\"00010101\");     \u0415\u0441\u043b\u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e(date) \u0422\u043e\u0433\u0434\u0430         \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430 = \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\u0414\u0430\u0442\u0443JSON(date, \u0424\u043e\u0440\u043c\u0430\u0442\u0414\u0430\u0442\u044bJSON.ISO);     \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;                                    \u041c\u0430\u0441\u0441\u0438\u0432 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u041f\u0440\u0438\u043a\u0430\u0437\u043e\u0432(\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437, \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430);     \u0421\u0442\u0440\u043e\u043a\u0430JSON = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cJSON(\u041c\u0430\u0441\u0441\u0438\u0432);          \u041e\u0442\u0432\u0435\u0442 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cHTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442();     \u041e\u0442\u0432\u0435\u0442.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0422\u0435\u043b\u043e\u0418\u0437\u0421\u0442\u0440\u043e\u043a\u0438(\u0421\u0442\u0440\u043e\u043a\u0430JSON);          \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041e\u0442\u0432\u0435\u0442; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438          \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u041f\u0440\u0438\u043a\u0430\u0437\u043e\u0432(\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437, \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430)      \u0417\u0430\u043f\u0440\u043e\u0441 = \u041d\u043e\u0432\u044b\u0439 \u0417\u0430\u043f\u0440\u043e\u0441;                       \u041b\u0438\u043c\u0438\u0442 = \"\";     \u041f\u043e\u0440\u044f\u0434\u043e\u043a = \"\";     \u0415\u0441\u043b\u0438 \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437 \u0422\u043e\u0433\u0434\u0430         \u041b\u0438\u043c\u0438\u0442 = \" \u041f\u0415\u0420\u0412\u042b\u0415 1 \";         \u041f\u043e\u0440\u044f\u0434\u043e\u043a = \"\u0423\u0411\u042b\u0412\";     \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;          \u0417\u0430\u043f\u0440\u043e\u0441.\u0422\u0435\u043a\u0441\u0442 = \"\u0412\u042b\u0411\u0420\u0410\u0422\u042c \u0420\u0410\u0417\u0420\u0415\u0428\u0415\u041d\u041d\u042b\u0415 \" + \u041b\u0438\u043c\u0438\u0442 + \"                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u041f\u0435\u0440\u0438\u043e\u0434 \u041a\u0410\u041a \u041f\u0435\u0440\u0438\u043e\u0434,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u041a\u0410\u041a \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440,                                |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0412\u0438\u0434\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u041a\u0410\u041a \u0412\u0438\u0434\u0421\u043e\u0431\u044b\u0442\u0438\u044f,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a.\u0421\u0441\u044b\u043b\u043a\u0430 \u041a\u0410\u041a \u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0421\u0441\u044b\u043b\u043a\u0430,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0424\u0430\u043c\u0438\u043b\u0438\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0418\u043c\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u041a\u0410\u041a \u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c                    |\u0418\u0417                    |\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439.\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u041a\u0410\u041a \u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432                                |\u0413\u0414\u0415                                    | \u041f\u0435\u0440\u0438\u043e\u0434 &gt; &amp;\u041c\u0430\u043a\u0441\u0414\u0430\u0442\u0430                                |                    |\u0423\u041f\u041e\u0420\u042f\u0414\u041e\u0427\u0418\u0422\u042c \u041f\u041e                    |\u041f\u0435\u0440\u0438\u043e\u0434 \" + \u041f\u043e\u0440\u044f\u0434\u043e\u043a;     \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"\u041c\u0430\u043a\u0441\u0414\u0430\u0442\u0430\", \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430);          \u0412\u044b\u0431\u043e\u0440\u043a\u0430 = \u0417\u0430\u043f\u0440\u043e\u0441.\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c().\u0412\u044b\u0431\u0440\u0430\u0442\u044c();     \u041c\u0430\u0441\u0441\u0438\u0432 = \u041d\u043e\u0432\u044b\u0439 \u041c\u0430\u0441\u0441\u0438\u0432;     \u041f\u043e\u043a\u0430 \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439() \u0426\u0438\u043a\u043b         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 = \u041d\u043e\u0432\u044b\u0439 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430(\"date, type, user, newPosition\");         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.date = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u041f\u0435\u0440\u0438\u043e\u0434;         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.type = \u0421\u0442\u0440\u043e\u043a\u0430(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0412\u0438\u0434\u0421\u043e\u0431\u044b\u0442\u0438\u044f);                  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c = \u041d\u043e\u0432\u044b\u0439 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430(\"uid, name, surname, patronymic\");         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.uid = \u0421\u0442\u0440\u043e\u043a\u0430(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0421\u0441\u044b\u043b\u043a\u0430.\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440());           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.name = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.surname = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.patronymic = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e;                   \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.user = \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c;                  \u0415\u0441\u043b\u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c) \u0422\u043e\u0433\u0434\u0430             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.newPosition = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435;           \u0418\u043d\u0430\u0447\u0435             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.newPosition = \"\";           \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;                  \u041c\u0430\u0441\u0441\u0438\u0432.\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c(\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430);     \u041a\u043e\u043d\u0435\u0446\u0426\u0438\u043a\u043b\u0430;     \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041c\u0430\u0441\u0441\u0438\u0432;  \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u041d\u0430\u0422\u0435\u043a\u0443\u0449\u0443\u044e\u0414\u0430\u0442\u0443()      \u0417\u0430\u043f\u0440\u043e\u0441 = \u041d\u043e\u0432\u044b\u0439 \u0417\u0430\u043f\u0440\u043e\u0441;     \u0417\u0430\u043f\u0440\u043e\u0441.\u0422\u0435\u043a\u0441\u0442 = \"\u0412\u042b\u0411\u0420\u0410\u0422\u042c \u0420\u0410\u0417\u0420\u0415\u0428\u0415\u041d\u041d\u042b\u0415                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0421\u0441\u044b\u043b\u043a\u0430 \u041a\u0410\u041a \u0421\u0441\u044b\u043b\u043a\u0430,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u041a\u043e\u0434 \u041a\u0410\u041a \u041a\u043e\u0434,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u0410\u041a \u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0424\u0430\u043c\u0438\u043b\u0438\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0418\u043c\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0413\u043e\u043b\u043e\u0432\u043d\u0430\u044f\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u041a\u0410\u041a \u0413\u043e\u043b\u043e\u0432\u043d\u0430\u044f\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f,                    |\u0415\u0421\u0422\u042cNULL(\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0417\u041d\u0410\u0427\u0415\u041d\u0418\u0415(\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439.\u041f\u0443\u0441\u0442\u0430\u044f\u0421\u0441\u044b\u043b\u043a\u0430)) \u041a\u0410\u041a \u0422\u0435\u043a\u0443\u0449\u0435\u0435\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435,                    |\u0415\u0421\u0422\u042cNULL(\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c, \u0417\u041d\u0410\u0427\u0415\u041d\u0418\u0415(\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438.\u041f\u0443\u0441\u0442\u0430\u044f\u0421\u0441\u044b\u043b\u043a\u0430)) \u041a\u0410\u041a \u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c                    |\u0418\u0417                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u041a\u0410\u041a \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438                    |\u041b\u0415\u0412\u041e\u0415 \u0421\u041e\u0415\u0414\u0418\u041d\u0415\u041d\u0418\u0415 \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439.\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439 \u041a\u0410\u041a \u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439                    |\u041f\u041e \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0421\u0441\u044b\u043b\u043a\u0430 = \u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a                    |\u0418 (\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430 \u0412                    |(\u0412\u042b\u0411\u0420\u0410\u0422\u042c                    |\u041c\u0410\u041a\u0421\u0418\u041c\u0423\u041c(\u0422.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430)                    |\u0418\u0417                    |\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439.\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439 \u041a\u0410\u041a \u0422                    |\u0413\u0414\u0415                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0421\u0441\u044b\u043b\u043a\u0430 = \u0422.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a                    |\u0418 &amp;\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u043e\u0414\u043d\u044f \u041c\u0415\u0416\u0414\u0423 \u0422.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430 \u0418 \u0422.\u0414\u0430\u0442\u0430\u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f))                    |\u0413\u0414\u0415                                  |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u041f\u043e\u043c\u0435\u0442\u043a\u0430\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u044f = \u041b\u041e\u0416\u042c\";     \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u043e\u0414\u043d\u044f\", \u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u0430\u0442\u0430());          \u0412\u044b\u0431\u043e\u0440\u043a\u0430 = \u0417\u0430\u043f\u0440\u043e\u0441.\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c().\u0412\u044b\u0431\u0440\u0430\u0442\u044c();      \u041c\u0430\u0441\u0441\u0438\u0432 = \u041d\u043e\u0432\u044b\u0439 \u041c\u0430\u0441\u0441\u0438\u0432;     \u041f\u043e\u043a\u0430 \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439() \u0426\u0438\u043a\u043b         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 = \u041d\u043e\u0432\u044b\u0439 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430(\"uid, name, surname, patronymic, position\");         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.uid = \u0421\u0442\u0440\u043e\u043a\u0430(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u0441\u044b\u043b\u043a\u0430.\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440());           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.name = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.surname = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.patronymic = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e;           \u0415\u0441\u043b\u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c) \u0422\u043e\u0433\u0434\u0430             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.position = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435;           \u0418\u043d\u0430\u0447\u0435             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.position = \"\";           \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;                  \u041c\u0430\u0441\u0441\u0438\u0432.\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c(\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430);     \u041a\u043e\u043d\u0435\u0446\u0426\u0438\u043a\u043b\u0430;     \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041c\u0430\u0441\u0441\u0438\u0432; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438        \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cJSON(\u0414\u0430\u043d\u043d\u044b\u0435)     \u0417\u0430\u043f\u0438\u0441\u044cJSON = \u041d\u043e\u0432\u044b\u0439 \u0417\u0430\u043f\u0438\u0441\u044cJSON;     \u0417\u0430\u043f\u0438\u0441\u044cJSON.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0421\u0442\u0440\u043e\u043a\u0443();       \u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044cJSON(\u0417\u0430\u043f\u0438\u0441\u044cJSON, \u0414\u0430\u043d\u043d\u044b\u0435);      \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0417\u0430\u043f\u0438\u0441\u044cJSON.\u0417\u0430\u043a\u0440\u044b\u0442\u044c(); \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cHTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442()       \u041e\u0442\u0432\u0435\u0442 = \u041d\u043e\u0432\u044b\u0439 HTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442(200);        \u041e\u0442\u0432\u0435\u0442.\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"Content-Type\",\"application\/json; charset=utf-8\");     \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041e\u0442\u0432\u0435\u0442; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432 1\u0421 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0443\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u0430\u0432\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 OpenIDM \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u044b 1\u0421 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c:<\/p>\n<p><a href=\"https:\/\/infostart.ru\/1c\/articles\/1293341\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/infostart.ru\/1c\/articles\/1293341\/<\/u><\/a><\/p>\n<p><a href=\"https:\/\/infostart.ru\/1c\/articles\/842751\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/infostart.ru\/1c\/articles\/842751\/<\/u><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 OpenIDM.<\/h3>\n<p>\u0415\u0441\u043b\u0438 OpenIDM \u0443 \u0432\u0430\u0441 \u0435\u0449\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u00a0<a href=\"https:\/\/www.3a-systems.ru\/blog\/2024-08-06-identity-management-and-openidm-intro#%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0-%D0%B8-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-openidm\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/a>.<\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a 1\u0421.<\/h4>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0<code>conf<\/code>\u00a0OpenIDM \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043a 1\u0421<\/p>\n<details class=\"spoiler\">\n<summary>provisioner.openicf-scriptedrest.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{     \"name\" : \"scriptedrest\",     \"connectorRef\" : {         \"connectorHostRef\" : \"#LOCAL\",         \"connectorName\" : \"org.forgerock.openicf.connectors.scriptedrest.ScriptedRESTConnector\",         \"bundleName\" : \"org.openidentityplatform.openicf.connectors.groovy-connector\",         \"bundleVersion\" : \"[1.4.0.0,2)\"     },     \"poolConfigOption\" : {         \"maxObjects\" : 10,         \"maxIdle\" : 10,         \"maxWait\" : 150000,         \"minEvictableIdleTimeMillis\" : 120000,         \"minIdle\" : 1     },     \"operationTimeout\" : {         \"CREATE\" : -1,         \"UPDATE\" : -1,         \"DELETE\" : -1,         \"TEST\" : -1,         \"SCRIPT_ON_CONNECTOR\" : -1,         \"SCRIPT_ON_RESOURCE\" : -1,         \"GET\" : -1,         \"RESOLVEUSERNAME\" : -1,         \"AUTHENTICATE\" : -1,         \"SEARCH\" : -1,         \"VALIDATE\" : -1,         \"SYNC\" : -1,         \"SCHEMA\" : -1     },     \"resultsHandlerConfig\" : {         \"enableNormalizingResultsHandler\" : true,         \"enableFilteredResultsHandler\" : true,         \"enableCaseInsensitiveFilter\" : false,         \"enableAttributesToGetSearchResultsHandler\" : true     },     \"configurationProperties\" : {         \"serviceAddress\" : \"http:\/\/localhost:8090\",         \"proxyAddress\" : null,         \"username\" : \"idm\",         \"password\" : \"passw0rd\",         \"defaultAuthMethod\" : \"BASIC_PREEMPTIVE\",         \"defaultRequestHeaders\" : [             null         ],         \"defaultContentType\" : \"application\/json\",         \"scriptExtensions\" : [             \"groovy\"         ],         \"sourceEncoding\" : \"UTF-8\",         \"customizerScriptFileName\" : \"CustomizerScript.groovy\",         \"searchScriptFileName\" : \"SearchScript.groovy\",         \"syncScriptFileName\" : \"SyncScript.groovy\",         \"recompileGroovySource\" : false,         \"minimumRecompilationInterval\" : 100,         \"debug\" : false,         \"verbose\" : false,         \"warningLevel\" : 1,         \"tolerance\" : 10,         \"disabledGlobalASTTransformations\" : null,         \"targetDirectory\" : null,         \"scriptRoots\" : [             \"&amp;{launcher.project.location}\/tools\"         ]     },     \"objectTypes\" : {         \"account\" : {             \"$schema\" : \"http:\/\/json-schema.org\/draft-03\/schema\",             \"id\" : \"__ACCOUNT__\",             \"type\" : \"object\",             \"nativeType\" : \"__ACCOUNT__\",             \"properties\" : {                 \"uid\" : {                     \"type\" : \"string\",                     \"nativeName\" : \"__NAME__\",                     \"nativeType\" : \"string\",                     \"flags\" : [                         \"NOT_UPDATEABLE\",                         \"NOT_CREATEABLE\"                     ]                 },                 \"name\" : {                     \"type\" : \"string\",                     \"nativeName\" : \"name\",                     \"nativeType\" : \"string\",                     \"required\" : true                 },                 \"surname\" : {                     \"type\" : \"string\",                     \"nativeName\" : \"surname\",                     \"nativeType\" : \"string\"                 },                 \"patronymic\" : {                     \"type\" : \"string\",                     \"nativeName\" : \"patronymic\",                     \"nativeType\" : \"string\"                 },                 \"position\" : {                     \"type\" : \"string\",                     \"nativeName\" : \"position\",                     \"nativeType\" : \"string\"                 }             }         }     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u00a0<code>configurationProperties<\/code>\u00a0\u0432 \u0441\u043e\u0442\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u0443 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b 1\u0421.<\/p>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0<code>tools<\/code>\u00a0\u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a API 1C:<\/p>\n<details class=\"spoiler\">\n<summary>CustomizerScript.groovy\u00a0&#8212; \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 HTTP \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import groovyx.net.http.RESTClient import groovyx.net.http.StringHashMap import org.apache.http.HttpHost import org.apache.http.auth.AuthScope import org.apache.http.auth.UsernamePasswordCredentials import org.apache.http.client.ClientProtocolException import org.apache.http.client.CredentialsProvider import org.apache.http.client.HttpClient import org.apache.http.client.config.RequestConfig import org.apache.http.client.protocol.HttpClientContext import org.apache.http.conn.routing.HttpRoute import org.apache.http.impl.auth.BasicScheme import org.apache.http.impl.client.BasicAuthCache import org.apache.http.impl.client.BasicCookieStore import org.apache.http.impl.client.BasicCredentialsProvider import org.apache.http.impl.client.HttpClientBuilder import org.apache.http.impl.conn.PoolingHttpClientConnectionManager import org.forgerock.openicf.connectors.scriptedrest.ScriptedRESTConfiguration import org.forgerock.openicf.connectors.scriptedrest.ScriptedRESTConfiguration.AuthMethod import org.identityconnectors.common.security.GuardedString  \/\/ must import groovyx.net.http.HTTPBuilder.RequestConfigDelegate import groovyx.net.http.HTTPBuilder.RequestConfigDelegate  \/**  * A customizer script defines the custom closures to interact with the default implementation and customize it.  *\/ customize {     init { HttpClientBuilder builder -&gt;          \/\/SETUP: org.apache.http         def c = delegate as ScriptedRESTConfiguration          def httpHost = new HttpHost(c.serviceAddress?.host, c.serviceAddress?.port, c.serviceAddress?.scheme);          PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();         \/\/ Increase max total connection to 200         cm.setMaxTotal(200);         \/\/ Increase default max connection per route to 20         cm.setDefaultMaxPerRoute(20);         \/\/ Increase max connections for httpHost to 50         cm.setMaxPerRoute(new HttpRoute(httpHost), 50);          builder.setConnectionManager(cm)          \/\/ configure timeout on the entire client         RequestConfig requestConfig = RequestConfig.custom().build();         builder.setDefaultRequestConfig(requestConfig)          if (c.proxyAddress != null) {             builder.setProxy(new HttpHost(c.proxyAddress?.host, c.proxyAddress?.port, c.proxyAddress?.scheme));         }          switch (ScriptedRESTConfiguration.AuthMethod.valueOf(c.defaultAuthMethod)) {             case ScriptedRESTConfiguration.AuthMethod.BASIC_PREEMPTIVE:             case ScriptedRESTConfiguration.AuthMethod.BASIC:                 \/\/ It's part of the http client spec to request the resource anonymously                 \/\/ first and respond to the 401 with the Authorization header.                 final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();                  c.password.access(                         {                             credentialsProvider.setCredentials(new AuthScope(httpHost.getHostName(), httpHost.getPort()),                                     new UsernamePasswordCredentials(c.username, new String(it)));                         } as GuardedString.Accessor                 );                  builder.setDefaultCredentialsProvider(credentialsProvider);                 break;             case ScriptedRESTConfiguration.AuthMethod.NONE:                 break;             default:                 throw new IllegalArgumentException();         }          c.propertyBag.put(HttpClientContext.COOKIE_STORE, new BasicCookieStore());     }      \/**      * This Closure can customize the httpClient and the returning object is injected into the Script Binding.      *\/     decorate { HttpClient httpClient -&gt;          \/\/SETUP: groovyx.net.http          def c = delegate as ScriptedRESTConfiguration          def authCache = null         if (AuthMethod.valueOf(c.defaultAuthMethod).equals(AuthMethod.BASIC_PREEMPTIVE)){             authCache = new BasicAuthCache();             authCache.put(new HttpHost(c.serviceAddress?.host, c.serviceAddress?.port, c.serviceAddress?.scheme), new BasicScheme());          }          def cookieStore = c.propertyBag.get(HttpClientContext.COOKIE_STORE)          RESTClient restClient = new InnerRESTClient(c.serviceAddress, c.defaultContentType, authCache, cookieStore)          Map&lt;Object, Object&gt; defaultRequestHeaders = new StringHashMap&lt;Object&gt;();         if (null != c.defaultRequestHeaders) {             c.defaultRequestHeaders.each {                 if (null != it) {                                     def kv = it.split('=')                     assert kv.size() == 2                     defaultRequestHeaders.put(kv[0], kv[1])                 }             }         }          restClient.setClient(httpClient);         restClient.setHeaders(defaultRequestHeaders)          \/\/ Return with the decorated instance         return restClient     }  }  RequestConfigDelegate blank = null;  class InnerRESTClient extends RESTClient {      def authCache = null;     def cookieStore = null;      InnerRESTClient(Object defaultURI, Object defaultContentType, authCache, cookieStore) throws URISyntaxException {         super(defaultURI, defaultContentType)         this.authCache = authCache         this.cookieStore = cookieStore     }      @Override     protected Object doRequest(             final RequestConfigDelegate delegate) throws ClientProtocolException, IOException {          \/\/ Add AuthCache to the execution context         if (null != authCache) {             \/\/do Preemptive Auth             delegate.getContext().setAttribute(HttpClientContext.AUTH_CACHE, authCache);         }         \/\/ Add AuthCache to the execution context         if (null != cookieStore) {             \/\/do Preemptive Auth             delegate.getContext().setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);         }         return super.doRequest(delegate)     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>SearchScript.groovy\u00a0&#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438\u0437 1\u0421<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import groovyx.net.http.RESTClient import org.apache.http.client.HttpClient import org.forgerock.openicf.connectors.scriptedrest.ScriptedRESTConfiguration import org.forgerock.openicf.misc.scriptedcommon.OperationType import org.identityconnectors.common.logging.Log import org.identityconnectors.framework.common.objects.Attribute import org.identityconnectors.framework.common.objects.AttributeUtil import org.identityconnectors.framework.common.objects.Name import org.identityconnectors.framework.common.objects.ObjectClass import org.identityconnectors.framework.common.objects.OperationOptions import org.identityconnectors.framework.common.objects.SearchResult import org.identityconnectors.framework.common.objects.Uid import org.identityconnectors.framework.common.objects.filter.Filter  import static groovyx.net.http.Method.GET  \/\/ imports used for CREST based REST APIs import org.forgerock.openicf.misc.crest.CRESTFilterVisitor import org.forgerock.openicf.misc.crest.VisitorParameter  def operation = operation as OperationType def configuration = configuration as ScriptedRESTConfiguration def httpClient = connection as HttpClient def connection = customizedConnection as RESTClient def filter = filter as Filter def log = log as Log def objectClass = objectClass as ObjectClass def options = options as OperationOptions def resultHandler = handler  log.info(\"Entering \" + operation + \" Script\")  def queryFilter = 'true' if (filter != null) {     queryFilter = filter.accept(CRESTFilterVisitor.VISITOR, [             translateName: { String name -&gt;                 if (AttributeUtil.namesEqual(name, Uid.NAME)) {                     return \"uid\"                 } else if (AttributeUtil.namesEqual(name, \"name\")) {                     return \"name\"                 } else if (AttributeUtil.namesEqual(name, \"surname\")) {                     return \"surname\"                 } else if (AttributeUtil.namesEqual(name, \"patronymic\")) {                     return \"patronymic\"                 } else {                     throw new IllegalArgumentException(\"Unknown field name: ${name}\");                 }             },             convertValue : { Attribute value -&gt;                 if (AttributeUtil.namesEqual(value.name, \"position\")) {                     return value.value                 } else {                     return AttributeUtil.getStringValue(value)                 }             }] as VisitorParameter).toString(); } switch (objectClass) {     case ObjectClass.ACCOUNT:         def searchResult = connection.request(GET) { req -&gt;             uri.path = '\/api\/users'             uri.query = [                     _queryFilter: queryFilter             ]              response.success = { resp, json -&gt;                 json.each() { value -&gt;                     resultHandler {                         uid value.uid                         id value.uid                         attribute 'surname', value?.surname                         attribute 'name', value?.name                         attribute 'patronymic', value?.patronymic                         attribute 'position', value?.position                     }                 }                 json             }         }          return new SearchResult()      case ObjectClass.GROUP:         throw new IllegalArgumentException(\"Group sync is not supported\"); }     <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>SyncScript.groovy\u00a0&#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u043c \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043c \u0438\u0437 1\u0421<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">     import groovyx.net.http.RESTClient import org.apache.http.client.HttpClient import org.forgerock.openicf.connectors.scriptedrest.ScriptedRESTConfiguration import org.forgerock.openicf.misc.scriptedcommon.OperationType import org.identityconnectors.common.logging.Log import org.identityconnectors.framework.common.objects.ObjectClass import org.identityconnectors.framework.common.objects.SyncToken  import static groovyx.net.http.Method.GET  def operation = operation as OperationType def configuration = configuration as ScriptedRESTConfiguration def httpClient = connection as HttpClient def connection = customizedConnection as RESTClient def log = log as Log def objectClass = objectClass as ObjectClass  log.info(\"Entering \" + operation + \" Script\");  if (OperationType.GET_LATEST_SYNC_TOKEN.equals(operation)) {      return connection.request(GET) { req -&gt;         uri.path = '\/api\/orders'         uri.query = [                 getLatest: 'true',         ]          response.success = { resp, json -&gt;             def lastToken = 0l             json.each() { it -&gt;                 lastToken = it.date             }             return new SyncToken(lastToken)         }          response.failure = { resp, json -&gt;             throw new ConnectException(json.message)         }     }  } else if (OperationType.SYNC.equals(operation)) {     def token = token as Object     log.info(\"Entering SYNC\");     switch (objectClass) {         case ObjectClass.ACCOUNT:             return connection.request(GET) { req -&gt;                 uri.path = '\/api\/orders'                 uri.query = [                         date: \"${token}\",                 ]                  response.success = { resp, json -&gt;                     def lastToken = 0l                     json.each() { changeLogEntry -&gt;                         lastToken = changeLogEntry.date                          def user = {                             uid changeLogEntry.user.uid                             id changeLogEntry.user.uid                             attribute 'name', changeLogEntry.user.name                             attribute 'surname', changeLogEntry.user.surname                             attribute 'patronymic', changeLogEntry.user.patronymic                             attribute 'position', changeLogEntry.newPosition?.name                         }                          handler({                             syncToken lastToken                             if (\"hire\".equals(changeLogEntry.type)) {                                 CREATE()                                 object user                             } else if (\"transfer\".equals(changeLogEntry.type)) {                                 CREATE_OR_UPDATE()                                 object user                             } else if (\"fire\".equals(changeLogEntry.type)) {                                 DELETE()                                 object {                                     uid changeLogEntry.user.uid                                     id changeLogEntry.user.uid                                     delegate.objectClass(objectClass)                                 }                                 return                             } else {                                 CREATE_OR_UPDATE()                                 object user                             }                         })                     }                     return new SyncToken(lastToken)                 }                  response.failure = { resp, json -&gt;                     throw new ConnectException(json.message)                 }             }             break;          case ObjectClass.GROUP:             throw new IllegalArgumentException(\"Group sync is not supported\");             break;     }  } else { \/\/ action not implemented     log.error(\"Sync script: action '\" + operation + \"' is not implemented in this script\"); }     <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/h4>\n<p>\u041f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u00a0<code>translit.js<\/code>\u00a0\u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0<code>script<\/code>\u00a0OpenIDM.<\/p>\n<details class=\"spoiler\">\n<summary>translit.js<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">\/*global exports*\/ (function () {     var translit = function (word) {          var converter = {             '\u0430': 'a', '\u0431': 'b', '\u0432': 'v', '\u0433': 'g', '\u0434': 'd',             '\u0435': 'e', '\u0451': 'e', '\u0436': 'zh', '\u0437': 'z', '\u0438': 'i',             '\u0439': 'y', '\u043a': 'k', '\u043b': 'l', '\u043c': 'm', '\u043d': 'n',             '\u043e': 'o', '\u043f': 'p', '\u0440': 'r', '\u0441': 's', '\u0442': 't',             '\u0443': 'u', '\u0444': 'f', '\u0445': 'h', '\u0446': 'c', '\u0447': 'ch',             '\u0448': 'sh', '\u0449': 'sch', '\u044c': '', '\u044b': 'y', '\u044a': '',             '\u044d': 'e', '\u044e': 'yu', '\u044f': 'ya'         }         var answer = '';         word = word.toLowerCase();         for (var i = 0; i &lt; word.length; ++i) {             if (converter[word[i]] == undefined) {                 answer += word[i];             } else {                 answer += converter[word[i]];             }         }         return answer;     }      var generateLogin = function (name, surname) {         var nameT = translit(name);         var surnameT = translit(surname);         return nameT.substring(0, 1) + surnameT;     }      exports.translit = translit;     exports.generateLogin = generateLogin;  }());<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>generateLogin<\/code>\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u043d\u0430 \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b.<\/p>\n<p>\u041f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438\u00a0<code>sync.json<\/code>\u00a0\u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0<code>conf<\/code>\u00a0OpenIDM.<\/p>\n<details class=\"spoiler\">\n<summary>sync.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{     \"mappings\" : [         {             \"target\" : \"managed\/user\",             \"source\" : \"system\/scriptedrest\/account\",             \"name\" : \"systemScriptedrestAccount_managedUser\",             \"properties\" : [                 {                     \"target\" : \"mail\",                     \"transform\" : {                         \"type\" : \"text\/javascript\",                         \"globals\" : { },                         \"source\" : \"require('translit').generateLogin(source.name, source.surname) + \\\"@example.org\\\"\"                     },                     \"source\" : \"\"                 },                 {                     \"target\" : \"sn\",                     \"source\" : \"surname\"                 },                 {                     \"target\" : \"givenName\",                     \"source\" : \"name\"                 },                 {                     \"target\" : \"userName\",                     \"transform\" : {                         \"type\" : \"text\/javascript\",                         \"globals\" : { },                         \"source\" : \"require('translit').generateLogin(source.name, source.surname)\"                     },                     \"source\" : \"\"                 },                 {                     \"target\" : \"roles\",                     \"transform\" : {                         \"type\" : \"text\/javascript\",                         \"globals\" : { },                         \"source\" : \"\/*global openidm*\/\\nlogger.warn(\\\"set role {} for {}\\\", source.position, source.name);\\n\\nfunction getRoles(position) {\\n    if(!position) {\\n        return [];\\n    }\\n    var response = openidm.query(\\\"managed\/role\\\", {\\\"_queryFilter\\\": 'name eq \\\"' + position + '\\\"'});\\n\\n    var roleId;\\n    if(!response.result || response.result.length === 0) {\\n        response = openidm.create(\\\"managed\/role\\\", null, {'name': position, 'description' : position});\\n        logger.warn(\\\"got new role response: {}\\\", response);\\n        roleId = response[\\\"_id\\\"];\\n\\n    } else {\\n        logger.warn(\\\"existing role response: {}\\\", response);\\n        roleId = response.result[0][\\\"_id\\\"];\\n    }\\n\\n    return [{\\n        \\\"_ref\\\": \\\"managed\/role\/\\\" + roleId\\n    }];\\n}\\n\\ngetRoles(source.position)\\n\\n\\n\"                     },                     \"source\" : \"\"                 }             ],             \"policies\" : [                 {                     \"action\" : \"EXCEPTION\",                     \"situation\" : \"AMBIGUOUS\"                 },                 {                     \"action\" : \"DELETE\",                     \"situation\" : \"SOURCE_MISSING\"                 },                 {                     \"action\" : \"CREATE\",                     \"situation\" : \"MISSING\"                 },                 {                     \"action\" : \"EXCEPTION\",                     \"situation\" : \"FOUND_ALREADY_LINKED\"                 },                 {                     \"action\" : \"DELETE\",                     \"situation\" : \"UNQUALIFIED\"                 },                 {                     \"action\" : \"EXCEPTION\",                     \"situation\" : \"UNASSIGNED\"                 },                 {                     \"action\" : \"EXCEPTION\",                     \"situation\" : \"LINK_ONLY\"                 },                 {                     \"action\" : \"IGNORE\",                     \"situation\" : \"TARGET_IGNORED\"                 },                 {                     \"action\" : \"IGNORE\",                     \"situation\" : \"SOURCE_IGNORED\"                 },                 {                     \"action\" : \"IGNORE\",                     \"situation\" : \"ALL_GONE\"                 },                 {                     \"action\" : \"UPDATE\",                     \"situation\" : \"CONFIRMED\"                 },                 {                     \"action\" : \"UPDATE\",                     \"situation\" : \"FOUND\"                 },                 {                     \"action\" : \"CREATE\",                     \"situation\" : \"ABSENT\"                 }             ],             \"onCreate\" : {                 \"type\" : \"text\/javascript\",                 \"globals\" : { },                 \"source\" : \"logger.warn(\\\"generating password for {}\\\", target);\\n\/\/ generate random password that aligns with policy requirements\\ntarget.password = require(\\\"crypto\\\").generateRandomString([\\n  { \\\"rule\\\": \\\"UPPERCASE\\\", \\\"minimum\\\": 1 },\\n  { \\\"rule\\\": \\\"LOWERCASE\\\", \\\"minimum\\\": 1 },\\n  { \\\"rule\\\": \\\"INTEGERS\\\", \\\"minimum\\\": 1 },\\n  { \\\"rule\\\": \\\"SPECIAL\\\", \\\"minimum\\\": 0, \\\"maximum\\\": 0 }\\n], 16);\\n\\nlogger.warn(\\\"genered password {}\\\", target.password);\\n\\n\\nlogger.warn(\\\"sending email {}\\\", target.mail);\\n\\nvar escapedPass = target.password\\n  .replace(\/&amp;\/g, \\\"&amp;amp;\\\")\\n  .replace(\/&lt;\/g, \\\"&amp;lt;\\\")\\n  .replace(\/&gt;\/g, \\\"&amp;gt;\\\")\\n  .replace(\/\\\"\/g, \\\"&amp;quot;\\\")\\n  .replace(\/'\/g, \\\"&amp;#039;\\\");\\n\\nvar params =  new Object();\\nparams.from = \\\"openidm@example.org\\\";\\nparams.to = target.mail;\\nparams.subject = \\\"\u0412\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c\\\";\\nparams.type = \\\"text\/html\\\";\\nparams.body = \\\"&lt;html&gt;&lt;body&gt;&lt;p&gt;\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435!&lt;br\/&gt;\u0412\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \\\" + escapedPass + \\\"&lt;\/p&gt;&lt;\/body&gt;&lt;\/html&gt;\\\";\\n\\ntry {\\n  openidm.action(\\\"external\/email\\\", \\\"send\\\", params);\\n} catch(ex) {\\n  logger.error(\\\"error sending mail: {}\\\", ex);\\n}\\n\"             },             \"taskThreads\" : 1         }     ] }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 OpenIDM. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435\u00a0<a href=\"http:\/\/localhost:8080\/admin\" rel=\"noopener noreferrer nofollow\"><u>http:\/\/localhost:8080\/admin<\/u><\/a>. \u041b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\u00a0<code>openidm-admin<\/code>\u00a0\u0438\u00a0<code>openidm-admin<\/code>. \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043c\u0435\u043d\u044e \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 Configure \u2192 Mappings.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438\u00a0<code>systemScriptedrestAccount_managedUser<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b85\/550\/d18\/b85550d18c51c0500c407eab236d8fd2.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 1\u0421 OpenIDM\" width=\"1742\" height=\"1286\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b85\/550\/d18\/b85550d18c51c0500c407eab236d8fd2.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 1\u0421 OpenIDM<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0441\u043e\u0431\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0435\u0439\u00a0<code>mail<\/code>,\u00a0<code>userName<\/code>\u00a0\u0438\u00a0<code>roles<\/code>\u00a0\u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435\u00a0<code>Transformation Script<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d78\/4ae\/6e1\/d784ae6e19b59437195f4902563a2879.png\" alt=\"\u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044f mail\" width=\"1786\" height=\"688\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d78\/4ae\/6e1\/d784ae6e19b59437195f4902563a2879.png\"\/><\/p>\n<div><figcaption>\u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044f mail<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u043d\u0435\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u0435. \u042d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435\u00a0<code>onCreate<\/code>\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0443\u00a0<code>Behaviors<\/code>\u00a0. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u00a0<code>Situational Event Scripts<\/code>\u00a0\u0438 \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u00a0<code>onCreate<\/code>\u00a0\u0421\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">logger.warn(\"generating password for {}\", target); \/\/ generate random password that aligns with policy requirements target.password = require(\"crypto\").generateRandomString([   { \"rule\": \"UPPERCASE\", \"minimum\": 1 },   { \"rule\": \"LOWERCASE\", \"minimum\": 1 },   { \"rule\": \"INTEGERS\", \"minimum\": 1 },   { \"rule\": \"SPECIAL\", \"minimum\": 0, \"maximum\": 0 } ], 16);  logger.warn(\"sending email {}\", target.mail);  var escapedPass = target.password   .replace(\/&amp;\/g, \"&amp;amp;\")   .replace(\/&lt;\/g, \"&amp;lt;\")   .replace(\/&gt;\/g, \"&amp;gt;\")   .replace(\/\"\/g, \"&amp;quot;\")   .replace(\/'\/g, \"&amp;#039;\");  var params =  new Object(); params.from = \"openidm@example.org\"; params.to = target.mail; params.subject = \"\u0412\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c\"; params.type = \"text\/html\"; params.body = \"&lt;html&gt;&lt;body&gt;&lt;p&gt;\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435!&lt;br\/&gt;\u0412\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \" + escapedPass + \"&lt;\/p&gt;&lt;\/body&gt;&lt;\/html&gt;\";  try {   openidm.action(\"external\/email\", \"send\", params); } catch(ex) {   logger.error(\"error sending mail: {}\", ex); }<\/code><\/pre>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b<\/h4>\n<p>\u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 SMTP \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c\u00a0<a href=\"https:\/\/github.com\/maildev\/maildev\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/maildev\/maildev<\/u><\/a>, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0432 Docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.<\/p>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0<code>conf<\/code>\u00a0OpenIDM \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a SMTP \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u0447\u0442\u043e\u0431\u044b OpenIDM \u043c\u043e\u0433 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e \u043f\u043e\u0447\u0442\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>external.email.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{     \"host\" : \"localhost\",     \"port\" : \"1025\",     \"auth\" : {         \"enable\" : false     },     \"starttls\" : {         \"enable\" : false     },     \"from\" : \"\" }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Docker \u043e\u0431\u0440\u0430\u0437 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e SMTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>docker run -p 1080:1080 -p 1025:1025 maildev\/maildev<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u043e\u0447\u0442\u044b \u0438\u0437 OpenIDM \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u00a0<a href=\"https:\/\/doc.openidentityplatform.org\/openidm\/integrators-guide\/chap-mail\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u0441\u044b\u043b\u043a\u0435<\/u><\/a>.<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<h4>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<p>\u0417\u0430\u0439\u0434\u0438\u0442\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 OpenIDM. \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043c\u0435\u043d\u044e \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 Configure \u2192 Mappings. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435\u00a0<code>systemScriptedrestAccount_managedUser<\/code>\u00a0\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443\u00a0<code>Reconcile<\/code>. \u0414\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a02\/75f\/b17\/a0275fb176955fcb83ad1167bb37e4d3.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f\" width=\"2316\" height=\"1230\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a02\/75f\/b17\/a0275fb176955fcb83ad1167bb37e4d3.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 Manage \u2192 Users. \u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b 1\u0421 \u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043b\u043e\u0433\u0438\u043d, \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0440\u043e\u043b\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2b9\/580\/85a\/2b958085acaded0d41024adeb0b94049.png\" alt=\"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 OpenIDM\" width=\"2314\" height=\"1548\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2b9\/580\/85a\/2b958085acaded0d41024adeb0b94049.png\"\/><\/p>\n<div><figcaption>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 OpenIDM<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043f\u043e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u0435. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e SMTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443\u00a0<a href=\"http:\/\/localhost:1080\/\" rel=\"noopener noreferrer nofollow\"><u>http:\/\/localhost:1080\/<\/u><\/a>. \u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0438\u0441\u044c\u043c\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cdd\/e5c\/090\/cdde5c09077ee79a00262b2aa9e978e1.png\" alt=\"Email \u0441\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c\" width=\"1360\" height=\"362\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cdd\/e5c\/090\/cdde5c09077ee79a00262b2aa9e978e1.png\"\/><\/p>\n<div><figcaption>Email \u0441\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c<\/figcaption><\/div>\n<\/figure>\n<h4>\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u0432<\/h4>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 1\u0421 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u043e, \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0435 \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u0430\u043b\u0435\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 1\u0421 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u0432. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u0432 \u0432 1\u0421 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0438\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0432 OpenIDM.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 OpenIDM \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043c\u0435\u043d\u044e \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 Configure \u2192 Schedules. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/94f\/cf5\/078\/94fcf5078cd45b74999024f3e2bf99f7.png\" alt=\"OpenIDM \u043d\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435\" width=\"2342\" height=\"1398\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/94f\/cf5\/078\/94fcf5078cd45b74999024f3e2bf99f7.png\"\/><\/p>\n<div><figcaption>OpenIDM \u043d\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u0439\u0434\u0438\u0442\u0435 \u0432 1\u0421 \u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u043a\u0430\u0437 \u043f\u0440\u0438\u0435\u043c\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u0418\u0432\u0430\u043d\u043e\u0432 \u0418\u0432\u0430\u043d \u0418\u0432\u0430\u043d\u043e\u0432\u0438\u0447 \u0441 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u041a\u043b\u0430\u0434\u043e\u0432\u0449\u0438\u043a. \u041f\u0440\u043e\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8cf\/34a\/bfa\/8cf34abfa414fee4a354baf7258e27f4.png\" alt=\"1\u0421 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e \u043f\u0440\u0438\u0435\u043c\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443\" title=\"1\u0421 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e \u043f\u0440\u0438\u0435\u043c\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443\" width=\"933\" height=\"607\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8cf\/34a\/bfa\/8cf34abfa414fee4a354baf7258e27f4.png\"\/><\/p>\n<div><figcaption>1\u0421 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e \u043f\u0440\u0438\u0435\u043c\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 OpenIDM<\/p>\n<p>\u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00a0<code>iivanov<\/code>\u00a0\u0441 \u0440\u043e\u043b\u044c\u044e \u041a\u043b\u0430\u0434\u043e\u0432\u0449\u0438\u043a<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d39\/620\/54f\/d3962054f400e7c5fd1c432dbaebda70.png\" alt=\"\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c OpenIDM\" width=\"2308\" height=\"1380\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d39\/620\/54f\/d3962054f400e7c5fd1c432dbaebda70.png\"\/><\/p>\n<div><figcaption>\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c OpenIDM<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432 1\u0421 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u041a\u0430\u0434\u0440\u043e\u0432\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434. \u0418 \u043d\u0430\u0437\u043d\u0430\u0447\u044c\u0442\u0435 \u0432 \u043d\u0435\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0443 \u043d\u043e\u0432\u0443\u044e \u0440\u043e\u043b\u044c \u201c\u041a\u0430\u0441\u0441\u0438\u0440\u201d. \u041f\u0440\u043e\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4c8\/d18\/8e7\/4c8d188e7553943e032c17da2df380b3.png\" alt=\"1\u0421 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435\" width=\"928\" height=\"586\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c8\/d18\/8e7\/4c8d188e7553943e032c17da2df380b3.png\"\/><\/p>\n<div><figcaption>1\u0421 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0440\u043e\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u00a0<code>iivanov<\/code>\u00a0OpenIDM.<\/p>\n<p>\u0415\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0440\u043e\u043b\u044c \u201c\u041a\u0430\u0441\u0441\u0438\u0440\u201d \u0438\u0437 1\u0421.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6fd\/7a8\/d6f\/6fd7a8d6f0efeb3ae9edebc26ff7584c.png\" alt=\"OpenIDM \u043d\u043e\u0432\u0430\u044f \u0440\u043e\u043b\u044c\" width=\"2304\" height=\"1064\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6fd\/7a8\/d6f\/6fd7a8d6f0efeb3ae9edebc26ff7584c.png\"\/><\/p>\n<div><figcaption>OpenIDM \u043d\u043e\u0432\u0430\u044f \u0440\u043e\u043b\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u0438\u043a\u0430\u0437 \u043e\u0431 \u0443\u0432\u043e\u043b\u044c\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0440\u0438\u043a\u0430\u0437 \u0432 1\u0421.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dc6\/b8b\/9d2\/dc6b8b9d28f4f136a4eb7edccd30212b.png\" alt=\"1\u0421 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e\u0431 \u0443\u0432\u043e\u043b\u044c\u043d\u0435\u043d\u0438\u0438\" width=\"927\" height=\"486\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dc6\/b8b\/9d2\/dc6b8b9d28f4f136a4eb7edccd30212b.png\"\/><\/p>\n<div><figcaption>1\u0421 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e\u0431 \u0443\u0432\u043e\u043b\u044c\u043d\u0435\u043d\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00a0<code>iivanov<\/code>\u00a0\u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 OpenIDM.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a9d\/9fa\/284\/a9d9fa28418bf88c79fdcad321e6c6f7.png\" alt=\"OpenIDM \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0434\u0430\u043b\u0435\u043d\" width=\"2314\" height=\"964\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a9d\/9fa\/284\/a9d9fa28418bf88c79fdcad321e6c6f7.png\"\/><\/p>\n<div><figcaption>OpenIDM \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0434\u0430\u043b\u0435\u043d<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/872844\/\"> https:\/\/habr.com\/ru\/articles\/872844\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0442\u0440\u0443\u0434\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e. \u041d\u0435 \u0440\u0430\u0437 \u0438 \u043d\u0435 \u0434\u0432\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0435\u043b\u044f\u043c\u0438 \u0436\u0434\u0443\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0442\u0435\u0440\u044f\u0435\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 &#8212; \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044e. OpenIDM \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 OpenIDM \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043a\u0430\u0437\u044b \u0438\u0437 1\u0421, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u043e\u043b\u0438. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443. \u041f\u0440\u0438 \u043a\u0430\u0434\u0440\u043e\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 &#8212; \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0440\u043e\u043b\u044c, \u0430 \u043f\u0440\u0438 \u0443\u0432\u043e\u043b\u044c\u043d\u0435\u043d\u0438\u0438 &#8212; \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 1\u0421<\/h3>\n<p>\u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 OpenIDM \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HTTP \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c JSON \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u043c \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043c. \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e, \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044f \u0432\u0441\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<figure class=\"\">\n<div><figcaption>HTTP \u0421\u0435\u0440\u0432\u0438\u0441 1\u0421<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f 1\u0421 \u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>HTTPIDM\u0421\u0435\u0440\u0432\u0438\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"1c\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0428\u0430\u0431\u043b\u043e\u043dURL\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\u0417\u0430\u043f\u0440\u043e\u0441)      \u041c\u0430\u0441\u0441\u0438\u0432 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u041d\u0430\u0422\u0435\u043a\u0443\u0449\u0443\u044e\u0414\u0430\u0442\u0443();     \u0421\u0442\u0440\u043e\u043a\u0430JSON = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cJSON(\u041c\u0430\u0441\u0441\u0438\u0432);          \u041e\u0442\u0432\u0435\u0442 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cHTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442();     \u041e\u0442\u0432\u0435\u0442.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0422\u0435\u043b\u043e\u0418\u0437\u0421\u0442\u0440\u043e\u043a\u0438(\u0421\u0442\u0440\u043e\u043a\u0430JSON);          \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041e\u0442\u0432\u0435\u0442; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0428\u0430\u0431\u043b\u043e\u043dURL\u041f\u0440\u0438\u043a\u0430\u0437\u044b\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\u0417\u0430\u043f\u0440\u043e\u0441)       getLatest = \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\u0417\u0430\u043f\u0440\u043e\u0441\u0430.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\"getLatest\");     \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437 = getLatest = \"true\";     date = \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\u0417\u0430\u043f\u0440\u043e\u0441\u0430.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\"date\");     \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430 = \u0414\u0430\u0442\u0430(\"00010101\");     \u0415\u0441\u043b\u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e(date) \u0422\u043e\u0433\u0434\u0430         \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430 = \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\u0414\u0430\u0442\u0443JSON(date, \u0424\u043e\u0440\u043c\u0430\u0442\u0414\u0430\u0442\u044bJSON.ISO);     \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;                                    \u041c\u0430\u0441\u0441\u0438\u0432 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u041f\u0440\u0438\u043a\u0430\u0437\u043e\u0432(\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437, \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430);     \u0421\u0442\u0440\u043e\u043a\u0430JSON = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cJSON(\u041c\u0430\u0441\u0441\u0438\u0432);          \u041e\u0442\u0432\u0435\u0442 = \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cHTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442();     \u041e\u0442\u0432\u0435\u0442.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0422\u0435\u043b\u043e\u0418\u0437\u0421\u0442\u0440\u043e\u043a\u0438(\u0421\u0442\u0440\u043e\u043a\u0430JSON);          \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041e\u0442\u0432\u0435\u0442; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438          \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u041f\u0440\u0438\u043a\u0430\u0437\u043e\u0432(\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437, \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430)      \u0417\u0430\u043f\u0440\u043e\u0441 = \u041d\u043e\u0432\u044b\u0439 \u0417\u0430\u043f\u0440\u043e\u0441;                       \u041b\u0438\u043c\u0438\u0442 = \"\";     \u041f\u043e\u0440\u044f\u0434\u043e\u043a = \"\";     \u0415\u0441\u043b\u0438 \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u041f\u0440\u0438\u043a\u0430\u0437 \u0422\u043e\u0433\u0434\u0430         \u041b\u0438\u043c\u0438\u0442 = \" \u041f\u0415\u0420\u0412\u042b\u0415 1 \";         \u041f\u043e\u0440\u044f\u0434\u043e\u043a = \"\u0423\u0411\u042b\u0412\";     \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;          \u0417\u0430\u043f\u0440\u043e\u0441.\u0422\u0435\u043a\u0441\u0442 = \"\u0412\u042b\u0411\u0420\u0410\u0422\u042c \u0420\u0410\u0417\u0420\u0415\u0428\u0415\u041d\u041d\u042b\u0415 \" + \u041b\u0438\u043c\u0438\u0442 + \"                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u041f\u0435\u0440\u0438\u043e\u0434 \u041a\u0410\u041a \u041f\u0435\u0440\u0438\u043e\u0434,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u041a\u0410\u041a \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440,                                |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0412\u0438\u0434\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u041a\u0410\u041a \u0412\u0438\u0434\u0421\u043e\u0431\u044b\u0442\u0438\u044f,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a.\u0421\u0441\u044b\u043b\u043a\u0430 \u041a\u0410\u041a \u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0421\u0441\u044b\u043b\u043a\u0430,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0424\u0430\u043c\u0438\u043b\u0438\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0418\u043c\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e,                    |\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u041a\u0410\u041a \u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c                    |\u0418\u0417                    |\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439.\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u041a\u0410\u041a \u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432                                |\u0413\u0414\u0415                                    | \u041f\u0435\u0440\u0438\u043e\u0434 &gt; &amp;\u041c\u0430\u043a\u0441\u0414\u0430\u0442\u0430                                |                    |\u0423\u041f\u041e\u0420\u042f\u0414\u041e\u0427\u0418\u0422\u042c \u041f\u041e                    |\u041f\u0435\u0440\u0438\u043e\u0434 \" + \u041f\u043e\u0440\u044f\u0434\u043e\u043a;     \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"\u041c\u0430\u043a\u0441\u0414\u0430\u0442\u0430\", \u0414\u0430\u0442\u0430\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u041f\u0440\u0438\u043a\u0430\u0437\u0430);          \u0412\u044b\u0431\u043e\u0440\u043a\u0430 = \u0417\u0430\u043f\u0440\u043e\u0441.\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c().\u0412\u044b\u0431\u0440\u0430\u0442\u044c();     \u041c\u0430\u0441\u0441\u0438\u0432 = \u041d\u043e\u0432\u044b\u0439 \u041c\u0430\u0441\u0441\u0438\u0432;     \u041f\u043e\u043a\u0430 \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439() \u0426\u0438\u043a\u043b         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 = \u041d\u043e\u0432\u044b\u0439 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430(\"date, type, user, newPosition\");         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.date = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u041f\u0435\u0440\u0438\u043e\u0434;         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.type = \u0421\u0442\u0440\u043e\u043a\u0430(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0412\u0438\u0434\u0421\u043e\u0431\u044b\u0442\u0438\u044f);                  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c = \u041d\u043e\u0432\u044b\u0439 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430(\"uid, name, surname, patronymic\");         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.uid = \u0421\u0442\u0440\u043e\u043a\u0430(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0421\u0441\u044b\u043b\u043a\u0430.\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440());           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.name = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.surname = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.patronymic = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e;                   \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.user = \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c;                  \u0415\u0441\u043b\u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c) \u0422\u043e\u0433\u0434\u0430             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.newPosition = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435;           \u0418\u043d\u0430\u0447\u0435             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.newPosition = \"\";           \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;                  \u041c\u0430\u0441\u0441\u0438\u0432.\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c(\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430);     \u041a\u043e\u043d\u0435\u0446\u0426\u0438\u043a\u043b\u0430;     \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041c\u0430\u0441\u0441\u0438\u0432;  \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u041d\u0430\u0422\u0435\u043a\u0443\u0449\u0443\u044e\u0414\u0430\u0442\u0443()      \u0417\u0430\u043f\u0440\u043e\u0441 = \u041d\u043e\u0432\u044b\u0439 \u0417\u0430\u043f\u0440\u043e\u0441;     \u0417\u0430\u043f\u0440\u043e\u0441.\u0422\u0435\u043a\u0441\u0442 = \"\u0412\u042b\u0411\u0420\u0410\u0422\u042c \u0420\u0410\u0417\u0420\u0415\u0428\u0415\u041d\u041d\u042b\u0415                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0421\u0441\u044b\u043b\u043a\u0430 \u041a\u0410\u041a \u0421\u0441\u044b\u043b\u043a\u0430,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u041a\u043e\u0434 \u041a\u0410\u041a \u041a\u043e\u0434,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u0410\u041a \u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0424\u0430\u043c\u0438\u043b\u0438\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u0418\u043c\u044f \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e.\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u0410\u041a \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e,                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0413\u043e\u043b\u043e\u0432\u043d\u0430\u044f\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u041a\u0410\u041a \u0413\u043e\u043b\u043e\u0432\u043d\u0430\u044f\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f,                    |\u0415\u0421\u0422\u042cNULL(\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0417\u041d\u0410\u0427\u0415\u041d\u0418\u0415(\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439.\u041f\u0443\u0441\u0442\u0430\u044f\u0421\u0441\u044b\u043b\u043a\u0430)) \u041a\u0410\u041a \u0422\u0435\u043a\u0443\u0449\u0435\u0435\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435,                    |\u0415\u0421\u0422\u042cNULL(\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c, \u0417\u041d\u0410\u0427\u0415\u041d\u0418\u0415(\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438.\u041f\u0443\u0441\u0442\u0430\u044f\u0421\u0441\u044b\u043b\u043a\u0430)) \u041a\u0410\u041a \u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c                    |\u0418\u0417                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u041a\u0410\u041a \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438                    |\u041b\u0415\u0412\u041e\u0415 \u0421\u041e\u0415\u0414\u0418\u041d\u0415\u041d\u0418\u0415 \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439.\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439 \u041a\u0410\u041a \u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439                    |\u041f\u041e \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0421\u0441\u044b\u043b\u043a\u0430 = \u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a                    |\u0418 (\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430 \u0412                    |(\u0412\u042b\u0411\u0420\u0410\u0422\u042c                    |\u041c\u0410\u041a\u0421\u0418\u041c\u0423\u041c(\u0422.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430)                    |\u0418\u0417                    |\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439.\u041a\u0430\u0434\u0440\u043e\u0432\u0430\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u044f\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u044b\u0439 \u041a\u0410\u041a \u0422                    |\u0413\u0414\u0415                    |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u0421\u0441\u044b\u043b\u043a\u0430 = \u0422.\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a                    |\u0418 &amp;\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u043e\u0414\u043d\u044f \u041c\u0415\u0416\u0414\u0423 \u0422.\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u0430 \u0418 \u0422.\u0414\u0430\u0442\u0430\u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f))                    |\u0413\u0414\u0415                                  |\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438.\u041f\u043e\u043c\u0435\u0442\u043a\u0430\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u044f = \u041b\u041e\u0416\u042c\";     \u0417\u0430\u043f\u0440\u043e\u0441.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f\u0414\u0430\u0442\u0430\u041d\u0430\u0447\u0430\u043b\u043e\u0414\u043d\u044f\", \u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u0430\u0442\u0430());          \u0412\u044b\u0431\u043e\u0440\u043a\u0430 = \u0417\u0430\u043f\u0440\u043e\u0441.\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c().\u0412\u044b\u0431\u0440\u0430\u0442\u044c();      \u041c\u0430\u0441\u0441\u0438\u0432 = \u041d\u043e\u0432\u044b\u0439 \u041c\u0430\u0441\u0441\u0438\u0432;     \u041f\u043e\u043a\u0430 \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439() \u0426\u0438\u043a\u043b         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 = \u041d\u043e\u0432\u044b\u0439 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430(\"uid, name, surname, patronymic, position\");         \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.uid = \u0421\u0442\u0440\u043e\u043a\u0430(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0421\u0441\u044b\u043b\u043a\u0430.\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440());           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.name = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0418\u043c\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.surname = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u0424\u0430\u043c\u0438\u043b\u0438\u044f;           \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.patronymic = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u041b\u0438\u0446\u043e\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e;           \u0415\u0441\u043b\u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e(\u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c) \u0422\u043e\u0433\u0434\u0430             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.position = \u0412\u044b\u0431\u043e\u0440\u043a\u0430.\u0422\u0435\u043a\u0443\u0449\u0430\u044f\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435;           \u0418\u043d\u0430\u0447\u0435             \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430.position = \"\";           \u041a\u043e\u043d\u0435\u0446\u0415\u0441\u043b\u0438;                  \u041c\u0430\u0441\u0441\u0438\u0432.\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c(\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430);     \u041a\u043e\u043d\u0435\u0446\u0426\u0438\u043a\u043b\u0430;     \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041c\u0430\u0441\u0441\u0438\u0432; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438        \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cJSON(\u0414\u0430\u043d\u043d\u044b\u0435)     \u0417\u0430\u043f\u0438\u0441\u044cJSON = \u041d\u043e\u0432\u044b\u0439 \u0417\u0430\u043f\u0438\u0441\u044cJSON;     \u0417\u0430\u043f\u0438\u0441\u044cJSON.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0421\u0442\u0440\u043e\u043a\u0443();       \u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044cJSON(\u0417\u0430\u043f\u0438\u0441\u044cJSON, \u0414\u0430\u043d\u043d\u044b\u0435);      \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0417\u0430\u043f\u0438\u0441\u044cJSON.\u0417\u0430\u043a\u0440\u044b\u0442\u044c(); \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044cHTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442()       \u041e\u0442\u0432\u0435\u0442 = \u041d\u043e\u0432\u044b\u0439 HTTP\u0421\u0435\u0440\u0432\u0438\u0441\u041e\u0442\u0432\u0435\u0442(200);        \u041e\u0442\u0432\u0435\u0442.\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"Content-Type\",\"application\/json; charset=utf-8\");     \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u041e\u0442\u0432\u0435\u0442; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432 1\u0421 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0443\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u0430\u0432\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 OpenIDM \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u044b 1\u0421 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c:<\/p>\n<p><a href=\"https:\/\/infostart.ru\/1c\/articles\/1293341\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/infostart.ru\/1c\/articles\/1293341\/<\/u><\/a><\/p>\n<p><a href=\"https:\/\/infostart.ru\/1c\/articles\/842751\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/infostart.ru\/1c\/articles\/842751\/<\/u><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 OpenIDM.<\/h3>\n<p>\u0415\u0441\u043b\u0438 OpenIDM \u0443 \u0432\u0430\u0441 \u0435\u0449\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u00a0<a href=\"https:\/\/www.3a-systems.ru\/blog\/2024-08-06-identity-management-and-openidm-intro#%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0-%D0%B8-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-openidm\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/a>.<\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a 1\u0421.<\/h4>\n<p>\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u00a0<code>conf<\/code>\u00a0OpenIDM \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043a 1\u0421<\/p>\n<details class=\"spoiler\">\n<summary>provisioner.openicf-scriptedrest.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{     \"name\" : \"scriptedrest\",     \"connectorRef\" : {         \"connectorHostRef\" : \"#LOCAL\",         \"connectorName\" : \"org.forgerock.openicf.connectors.scriptedrest.ScriptedRESTConnector\",         \"bundleName\" : \"org.openidentityplatform.openicf.connectors.groovy-connector\",         \"bundleVersion\" : \"[1.4.0.0,2)\"     },     \"poolConfigOption\" : {         \"maxObjects\" : 10,         \"maxIdle\" : 10,         \"maxWait\" : 150000,         \"minEvictableIdleTimeMillis\" : 120000,         \"minIdle\" : 1     },     \"operationTimeout\" : {         \"CREATE\" : -1,         \"UPDATE\" : -1,         \"DELETE\" : -1,         \"TEST\" : -1,         \"SCRIPT_ON_CONNECTOR\" : -1,         \"SCRIPT_ON_RESOURCE\" : -1,         \"GET\" : -1,         \"RESOLVEUSERNAME\" : -1,         \"AUTHENTICATE\" : -1,         \"SEARCH\" : -1,         \"VALIDATE\" : -1,         \"SYNC\" : -1,         \"SCHEMA\" : -1     },     \"resultsHandlerConfig\" : {         \"enableNormalizingResultsHandler\" : true,         \"enableFilteredResultsHandler\" : true,         \"enableCaseInsensitiveFilter\" : false,         \"enableAttributesToGetSearchResultsHandler\" : true     },     \"configurationProperties\" : {         \"serviceAddress\" : \"http:\/\/localhost:8090\",         \"proxyAddress\" : null,         \"username\" : \"idm\",         \"password\" : \"passw0rd\",         \"defaultAuthMethod\" : \"BASIC_PREEMPTIVE\",         \"defaultRequestHeaders\" : [             null         ],         \"defaultContentType\" : \"application\/json\",         \"scriptExtensions\" : [             \"groovy\"         ],         \"sourceEncoding\" : \"UTF-8\",         \"customizerScriptFileName\" : \"CustomizerScript.groovy\",         \"searchScriptFileName\" : \"SearchScript.groovy\",         \"syncScriptFileName\" : \"SyncScript.groovy\",         \"recompileGroovySource\" : false,         \"minimumRecompilationInterval\" : 100,         \"debug\" : false,         \"verbose\" :<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-444837","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/444837","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=444837"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/444837\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=444837"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=444837"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=444837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}