25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/omniauth/strategies/vkontakte/view_helper.rb', line 25
def vkontakte_login_button control = nil
default_control = false
control ||= begin
default_control = true
'<div id="vk_login" onclick="vkLogin.doLogin();"></div>'
end
button= "<div id=\"vk_api_transport\" style=\"float:left\"></div>\n<script type=\"text/javascript\">\n window.vkAsyncInit = function() {\n VK.init({\n apiId: '\#{OmniAuth.config.vkontakte_app_id}',\n nameTransportPath: \"/xd_receiver.html\"\n });\n \#{ \"VK.UI.button('vk_login');\" if default_control }\n };\n vkLogin = {\n doLogin: function() {\n VK.Auth.login(vkLogin.loginResult, '\#{OmniAuth.config.vkontakte_params[:permissions]}');\n },\n redirectWithPost: function(url, data) {\n data = data || {};\n \#{ respond_to?(:request_forgery_protection_token) && respond_to?(:form_authenticity_token) ?\n \"data['\#{request_forgery_protection_token}'] = '\#{form_authenticity_token}'; var method = 'POST';\" :\n \"var method = 'GET';\" }\n var form = document.createElement(\"form\"),\ninput;\n form.setAttribute(\"action\", url);\n form.setAttribute(\"method\", method);\n \n for (var property in data) {\n if (data.hasOwnProperty(property)) {\nvar value = data[property];\nif (value instanceof Array) {\n for (var i = 0, l = value.length; i < l; i++) {\n input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"hidden\");\n input.setAttribute(\"name\", property);\n input.setAttribute(\"value\", value[i]);\n form.appendChild(input);\n }\n}\nelse {\n input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"hidden\");\n input.setAttribute(\"name\", property);\n input.setAttribute(\"value\", value);\n form.appendChild(input);\n}\n }\n }\n document.body.appendChild(form);\n form.submit();\n document.body.removeChild(form);\n },\n loginResult: function (r) {\n if (r.session) {\n if (r.session.expire != \"0\") {\nvkLogin.getUserProfile(vkLogin.putUserProfile);\n } else if (r.session.expire == \"0\") {\nVK.Observer.subscribe(\"auth.sessionChange\", function (r) {\n VK.Observer.unsubscribe(\"auth.sessionChange\");\n if (r.session && r.session.expire != \"0\") {\n vkLogin.getUserProfile(vkLogin.putUserProfile)\n } else {\n }\n});\nVK.Auth.login()\n }\n }\n },\n getUserProfile: function (callFunc) {\n var code;\n code = 'return {';\n code += 'me: API.getProfiles({uids: API.getVariable({key: 1280}), fields: \"nickname,sex,photo\"})[0]';\n code += '};';\n VK.Api.call('execute', {\n 'code': code\n },\n callFunc);\n },\n putUserProfile: function (data) {\n if (data.response) {\n r = data.response;\n vkLogin.redirectWithPost('\#{OmniAuth.config.path_prefix}/vkontakte/callback', r.me);\n }\n }\n };\n (function() {\n var el = document.createElement(\"script\");\n el.type = \"text/javascript\";\n el.charset = \"windows-1251\";\n el.src = \"http://vkontakte.ru/js/api/openapi.js\";\n el.async = true;\n document.getElementById(\"vk_api_transport\").appendChild(el);\n }());\n</script>\n\#{ control }\n"
button.respond_to?(:html_safe) ? button.html_safe : button
end
|