Advertisement
stuppid_bot

Untitled

Jan 31st, 2016
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.75 KB | None | 0 0
  1. // Генерируем форму
  2. ;(function(){var s=document.createElement('style');s.textContent="\n    body {\n      color: #212121;\n      margin: 0;\n      font: normal 13px/1em Arial, sans-serif;\n    }\n    #mainWrapper {\n      margin: auto;\n      width: 200px;\n      padding: 10px 20px;\n    }\n    .inputBox {\n      padding: 2px 4px;\n    }\n    .inputBox input {\n      width: 100%;\n      box-sizing: border-box;\n      text-align: center;\n      display: block;\n      margin: auto;\n    }\n    .captchaBox {\n      padding: 2px 4px;\n      height: 50px;\n      width: 130px;\n      display: block;\n      margin: auto;\n    }\n    #captchaKey {\n      width: 130px;\n    }\n    .buttonBox {\n      padding: 2px 4px;\n    }\n    .buttonBox button {\n      width: 130px;\n      box-sizing: border-box;\n      display: block;\n      margin: auto;\n    }\n    #captchaWrapper {\n      display: none;\n    }\n    #errorMessage {\n      display: none;\n      text-align: center;\n      background: #fbbebe;\n      border: solid 1px #f00;\n      margin: 2px 4px;\n      padding: 4px 8px;\n    }\n  ";document.head.appendChild(s);document.body.innerHTML="<div id=\"mainWrapper\">\n    <form id=\"loginForm\">\n      <div id=\"errorMessage\"></div>\n      <div class=\"inputBox\">\n        <input type=\"text\" id=\"username\" name=\"username\" placeholder=\"Email or phone number\" required=\"\">\n      </div>\n      <div class=\"inputBox\">\n        <input type=\"password\" id=\"password\" name=\"password\" placeholder=\"Password\" required=\"\">\n      </div>\n      <div id=\"captchaWrapper\">\n        <div class=\"captchaBox\">\n          <img id=\"captchaImg\">\n        </div>\n        <div class=\"inputBox\">\n          <input type=\"text\" id=\"captchaKey\" name=\"captchaKey\" placeholder=\"Captcha Code\">\n        </div>\n      </div>\n      <div class=\"buttonBox\">\n        <button>Log In</button>\n      </div>\n    </form>\n  </div>";s=document.createElement('script');s.textContent="\n    var loginForm = document.getElementById(\"loginForm\");\n    loginForm.addEventListener(\"submit\", function(ev) {\n      ev.preventDefault();\n    });\n    var captchaImg = document.getElementById(\"captchaImg\");\n    var captchaSrc = captchaImg.src;\n    captchaImg.addEventListener(\"click\", function() {\n      this.src = captchaSrc + '&' + Date.now();\n    });\n  ";document.body.appendChild(s)})();
  3.  
  4. // event-emitter.js
  5. //
  6. // @author Sergei Snegirev (tz4678@gmail.com)
  7. //
  8.  
  9. /**
  10.  * EventEmitter constructor
  11.  */
  12. function EventEmitter() {
  13.   this._listeners = {};
  14. }
  15.  
  16. EventEmitter.prototype = {
  17.   /**
  18.    * Add event listener
  19.    *
  20.    * @param event {string}
  21.    * @param fn {function}
  22.    * @param scope {object} (optional)
  23.    * @param once {boolean} (optional)
  24.    * @return {this}
  25.    */
  26.   on: function(event, fn, scope, once) {
  27.     (this._hasListeners(event) ? this._listeners[event] :
  28.       this._listeners[event] = []).push({
  29.       fn: fn,
  30.       scope: scope != null ? scope : this,
  31.       once: once
  32.     });
  33.     return this;
  34.   },
  35.   /**
  36.    * Add one-shot event listener
  37.    *
  38.    * @param event {string}
  39.    * @param fn {function}
  40.    * @param scope {object} (optional)
  41.    * @return {this}
  42.    */
  43.   once: function(event, fn, scope) {
  44.     return this.on(event, fn, scope, true);
  45.   },
  46.   /**
  47.    * Remove event listeners
  48.    *
  49.    *
  50.    * @param event {string} (optional)
  51.    * @param fn {function} (optional)
  52.    * @param scope {object} (optional)
  53.    * @return {this}
  54.    */
  55.   off: function(event, fn, scope) {
  56.     if (!arguments.length) {
  57.       // .off() remove all listeners
  58.       this._listeners = {};
  59.     } else if (arguments.length == 1) {
  60.       // .off(event) remove all listeners for event
  61.       if (this._hasListeners(event)) {
  62.         delete this._listeners[event];
  63.       }
  64.     } else {
  65.       // .off(event, fn[, scope]) remove all listeners fn for event or
  66.       // remove all listeners fn for event in the scope
  67.       if (this._hasListeners(event)) {
  68.         var listeners = this._listeners[event];
  69.         var i = 0;
  70.         while (i < listeners.length) {
  71.           var listener = listeners[i];
  72.           if (fn === listener.fn &&
  73.               (scope == null || scope === listener.scope)) {
  74.             listeners.splice(i, 1);
  75.           } else {
  76.             ++i
  77.           }
  78.         }
  79.         if (!listeners.length) {
  80.           delete this._listeners[event];
  81.         }
  82.       }
  83.     }
  84.     return this;
  85.   },
  86.   /**
  87.    * Emit event
  88.    *
  89.    * <code>.emit(event[, arg1[, arg2[, ...]]])</code>
  90.    *
  91.    * @param event {string}
  92.    * @param *args
  93.    */
  94.   emit: function(event, args) {
  95.     if (!this._hasListeners(event)) {
  96.       return;
  97.     }
  98.     args = [].slice.call(arguments, 1);
  99.     var listeners = this._listeners[event];
  100.     var i = 0;
  101.     while (i < listeners.length) {
  102.       var listener = listeners[i];
  103.       listener.fn.apply(listener.scope, args)
  104.       if (listener.once) {
  105.         listeners.splice(i, 1);
  106.       } else {
  107.         ++i
  108.       }
  109.     }
  110.     if (!listeners.length) {
  111.       delete this._listeners[event];
  112.     }
  113.  
  114.   },
  115.   _hasListeners: function(event) {
  116.     return this._listeners.hasOwnProperty(event);
  117.   }
  118. };
  119.  
  120. /**
  121.  * Add mixin to obj
  122.  *
  123.  * <code>
  124.  * function Foo() {}
  125.  *
  126.  * EventEmitter.mixin(Foo);
  127.  * var foo = new Foo();
  128.  * foo.on("test", () => console.log("It's works!"));
  129.  * foo.emit("test");
  130.  * </code>
  131.  *
  132.  * @param obj {object}
  133.  * @return {object}
  134.  */
  135. EventEmitter.mixin = function(obj) {
  136.   if (typeof obj == "function") {
  137.     obj = obj.prototype;
  138.   }
  139.   var proto = new EventEmitter();
  140.   for (var i in proto) {
  141.     obj[i] = proto[i];
  142.   }
  143.   return obj;
  144. };
  145.  
  146. // http.js
  147. function encodeQueryParameters(parameters, sep, eq) {
  148.   var pairs = [];
  149.   sep = sep || '&';
  150.   eq = eq || '=';
  151.   for (var i in parameters) {
  152.     if (parameters.hasOwnProperty(i)) {
  153.       var name = encodeURIComponent(i);
  154.       var value = encodeURIComponent(parameters[i]);
  155.       pairs.push(name + eq + value);
  156.     }
  157.   }
  158.   return pairs.join(sep);
  159. }
  160.  
  161. function parseQueryString(str, sep, eq) {
  162.   sep = sep || '&';
  163.   eq = eq || '=';
  164.   var pairs = str.split(sep);
  165.   var ret = {};
  166.   for (var i = 0; i < pairs.length; ++i) {
  167.     var pair = pairs[i].split(eq);
  168.     var name = decodeURIComponent(pair[0]);
  169.     var value = pair.length == 2 ? decodeURIComponent(pair[1]) : '';
  170.     ret[name] = value;
  171.   }
  172.   return ret;
  173. }
  174.  
  175. function request(method, url, callback, data) {
  176.   var xhr = new XMLHttpRequest();
  177.   xhr.open(method, url);
  178.   xhr.onload = function() {
  179.     if (typeof callback == "function") {
  180.       try {
  181.         xhr.responseJSON = JSON.parse(xhr.responseText);
  182.       } catch (e) {}
  183.       var data = xhr.responseJSON || xhr.responseText;
  184.       callback(data, xhr.status, xhr);
  185.     }
  186.   };
  187.   xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  188.   xhr.send(data);
  189. }
  190.  
  191. function get(url, callback, parameters) {
  192.   if (parameters) {
  193.     parameters = encodeQueryParameters(parameters);
  194.     url += (url.indexOf('?') == -1 ? '?' : '&') + parameters;
  195.   }
  196.   request('GET', url, callback);
  197. }
  198.  
  199. function post(url, callback, data) {
  200.   data || (data = encodeQueryParameters(data));
  201.   request('POST', url, callback, data);
  202. }
  203.  
  204. //
  205. var API_VERSION = 5.44;
  206. var AUTH_URL = "https://oauth.vk.com/token";
  207. var CLIENT_ID = 2274003;
  208. var CLIENT_SECRET = "hHbZxrka2uZ6jB1inYsH";
  209.  
  210. function Authentication() {
  211.   this._captchaSid = null;
  212. }
  213.  
  214. EventEmitter.mixin(Authentication);
  215.  
  216. Authentication.prototype.login = function(username, password, captchaKey) {
  217.   var self = this;
  218.   var params = {
  219.     v: API_VERSION,
  220.     client_id: CLIENT_ID,
  221.     client_secret: CLIENT_SECRET,
  222.     grant_type: "password",
  223.     username: username,
  224.     password: password
  225.   };
  226.   if (captchaKey) {
  227.     params['captcha_key'] = captchaKey;
  228.     params['captcha_sid'] = this._captchaSid;
  229.   }
  230.   get(AUTH_URL, function(response) {
  231.     console.log(response);
  232.     if (response.error) {
  233.       if (response.error == 'need_captcha') {
  234.         self._captchaSid = response.captcha_sid;
  235.         self.emit('captcha', response.captcha_img);
  236.         return;
  237.       }
  238.       self.emit("error", response);
  239.       return;
  240.     }
  241.     // там еще expires_in остался, но он равен 0 для офиц. приложений
  242.     self.emit("success", response);
  243.   }, params)
  244. };
  245.  
  246. var authentication = new Authentication();
  247. var loginForm = document.getElementById("loginForm");
  248. var captchaWrapper = document.getElementById("captchaWrapper");
  249. var captchaImg = document.getElementById("captchaImg");
  250. var captchaKey = document.getElementById("captchaKey");
  251. var errorMessage = document.getElementById("errorMessage");
  252.  
  253. loginForm.addEventListener("submit", function() {
  254.   var captchaKey = captchaWrapper.style.display == "block" ?
  255.     this.captchaKey.value : null;
  256.   captchaWrapper.style.display = "none";
  257.   errorMessage.style.display = "none";
  258.   authentication.login(this.username.value, this.password.value, captchaKey);
  259. });
  260.  
  261. captchaImg.onload = function() {
  262.   captchaWrapper.style.display = "block";
  263. };
  264.  
  265. authentication.on("captcha", function(url) {
  266.   captchaImg.src = url;
  267.   captchaKey.value = "";
  268.   captchaKey.focus();
  269.   captchaKey.scrollIntoView();
  270. });
  271.  
  272. authentication.on("error", function(data) {
  273.   errorMessage.style.display = "block";
  274.   errorMessage.innerHTML = "<b>" + data.error + "</b><br>" +
  275.     data.error_description;
  276. });
  277.  
  278. authentication.on("success", function(data) {
  279.   var expiry = new Date();
  280.   expiry.setSeconds(2e9);
  281.   expiry = expiry.toUTCString();
  282.   document.cookie = "access_token=" + data.access_token +
  283.     "; domain=.vk.com; path=/; expires=" + expiry
  284.   document.cookie = "user_id=" + data.user_id +
  285.     "; domain=.vk.com; path=/; expires=" + expiry;
  286.   console.log("Login Succeded!");
  287.   location.href = "https://api.vk.com/";
  288. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement