Advertisement
Guest User

Untitled

a guest
Jan 13th, 2018
1,056
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.32 KB | None | 0 0
  1. <html>
  2. <!--
  3. WarfaceBot, a blind XMPP client for Warface (FPS)
  4. Copyright (C) 2015-2017 Levak Borok <levak92@gmail.com>
  5.  
  6. This program is free software: you can redistribute it and/or modify it
  7. under the terms of the GNU Affero General Public License as published by
  8. the Free Software Foundation, either version 3 of the License, or (at your
  9. option) any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Affero General Public License
  17. along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. -->
  19. <head>
  20. <HTA:APPLICATION
  21. ApplicationName="Launcher"
  22. Scroll="no"
  23. SingleInstance="no"
  24. MaximizeButton="no"
  25. Border="thin"
  26. MaximizeButton="no"
  27. MinimizeButton="yes"
  28. ContextMenu="no"
  29. InnerBorder="no"
  30. Selection="no"
  31. >
  32.  
  33. <title>Warfacebot Launcher</title>
  34. <meta http-equiv="X-UA-Compatible" content="IE=10">
  35.  
  36. <script language='javascript'>
  37. /* ============= Libraries ============= */
  38.  
  39. /* MD5 for js - MIT license - https://github.com/blueimp/JavaScript-MD5 d92d988de9e3cb20741b9d72717dfacf2db993bc */
  40. !function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="";for(t=0;t<32*n.length;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;for(t=0;t<8*n.length;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
  41. /* End of MD5 for js */
  42.  
  43. /* SHA1 for js - MIT license - https://github.com/emn178/js-sha1 731295e355fcfb5292c042068a7e74aefe59f3fa */
  44. (function(x,F){"undefined"!=typeof module&&(x=global);var k="0123456789abcdef".split(""),C=[-2147483648,8388608,32768,128],v=[24,16,8,0],b=[],D=function(w){var x="string"!=typeof w;x&&w.constructor==ArrayBuffer&&(w=new Uint8Array(w));var n,p,q,r,t,m=0,y=!1,a,l,h,u=0,z=0,B=0,A=w.length;n=1732584193;p=4023233417;q=2562383102;r=271733878;t=3285377520;do{b[0]=m;b[16]=b[1]=b[2]=b[3]=b[4]=b[5]=b[6]=b[7]=b[8]=b[9]=b[10]=b[11]=b[12]=b[13]=b[14]=b[15]=0;if(x)for(a=z;u<A&&64>a;++u)b[a>>2]|=w[u]<<v[a++&3];else for(a=
  45. z;u<A&&64>a;++u)m=w.charCodeAt(u),128>m?b[a>>2]|=m<<v[a++&3]:(2048>m?b[a>>2]|=(192|m>>6)<<v[a++&3]:(55296>m||57344<=m?b[a>>2]|=(224|m>>12)<<v[a++&3]:(m=65536+((m&1023)<<10|w.charCodeAt(++u)&1023),b[a>>2]|=(240|m>>18)<<v[a++&3],b[a>>2]|=(128|m>>12&63)<<v[a++&3]),b[a>>2]|=(128|m>>6&63)<<v[a++&3]),b[a>>2]|=(128|m&63)<<v[a++&3]);B+=a-z;z=a-64;u==A&&(b[a>>2]|=C[a&3],++u);m=b[16];u>A&&56>a&&(b[15]=B<<3,y=!0);for(h=16;80>h;++h)a=b[h-3]^b[h-8]^b[h-14]^b[h-16],b[h]=a<<1|a>>>31;var c=n,d=p,e=q,f=r,g=t;for(h=
  46. 0;20>h;h+=5)l=d&e|~d&f,a=c<<5|c>>>27,g=a+l+g+1518500249+b[h]<<0,d=d<<30|d>>>2,l=c&d|~c&e,a=g<<5|g>>>27,f=a+l+f+1518500249+b[h+1]<<0,c=c<<30|c>>>2,l=g&c|~g&d,a=f<<5|f>>>27,e=a+l+e+1518500249+b[h+2]<<0,g=g<<30|g>>>2,l=f&g|~f&c,a=e<<5|e>>>27,d=a+l+d+1518500249+b[h+3]<<0,f=f<<30|f>>>2,l=e&f|~e&g,a=d<<5|d>>>27,c=a+l+c+1518500249+b[h+4]<<0,e=e<<30|e>>>2;for(;40>h;h+=5)l=d^e^f,a=c<<5|c>>>27,g=a+l+g+1859775393+b[h]<<0,d=d<<30|d>>>2,l=c^d^e,a=g<<5|g>>>27,f=a+l+f+1859775393+b[h+1]<<0,c=c<<30|c>>>2,l=g^c^d,
  47. a=f<<5|f>>>27,e=a+l+e+1859775393+b[h+2]<<0,g=g<<30|g>>>2,l=f^g^c,a=e<<5|e>>>27,d=a+l+d+1859775393+b[h+3]<<0,f=f<<30|f>>>2,l=e^f^g,a=d<<5|d>>>27,c=a+l+c+1859775393+b[h+4]<<0,e=e<<30|e>>>2;for(;60>h;h+=5)l=d&e|d&f|e&f,a=c<<5|c>>>27,g=a+l+g-1894007588+b[h]<<0,d=d<<30|d>>>2,l=c&d|c&e|d&e,a=g<<5|g>>>27,f=a+l+f-1894007588+b[h+1]<<0,c=c<<30|c>>>2,l=g&c|g&d|c&d,a=f<<5|f>>>27,e=a+l+e-1894007588+b[h+2]<<0,g=g<<30|g>>>2,l=f&g|f&c|g&c,a=e<<5|e>>>27,d=a+l+d-1894007588+b[h+3]<<0,f=f<<30|f>>>2,l=e&f|e&g|f&g,a=d<<
  48. 5|d>>>27,c=a+l+c-1894007588+b[h+4]<<0,e=e<<30|e>>>2;for(;80>h;h+=5)l=d^e^f,a=c<<5|c>>>27,g=a+l+g-899497514+b[h]<<0,d=d<<30|d>>>2,l=c^d^e,a=g<<5|g>>>27,f=a+l+f-899497514+b[h+1]<<0,c=c<<30|c>>>2,l=g^c^d,a=f<<5|f>>>27,e=a+l+e-899497514+b[h+2]<<0,g=g<<30|g>>>2,l=f^g^c,a=e<<5|e>>>27,d=a+l+d-899497514+b[h+3]<<0,f=f<<30|f>>>2,l=e^f^g,a=d<<5|d>>>27,c=a+l+c-899497514+b[h+4]<<0,e=e<<30|e>>>2;n=n+c<<0;p=p+d<<0;q=q+e<<0;r=r+f<<0;t=t+g<<0}while(!y);return k[n>>28&15]+k[n>>24&15]+k[n>>20&15]+k[n>>16&15]+k[n>>12&
  49. 15]+k[n>>8&15]+k[n>>4&15]+k[n&15]+k[p>>28&15]+k[p>>24&15]+k[p>>20&15]+k[p>>16&15]+k[p>>12&15]+k[p>>8&15]+k[p>>4&15]+k[p&15]+k[q>>28&15]+k[q>>24&15]+k[q>>20&15]+k[q>>16&15]+k[q>>12&15]+k[q>>8&15]+k[q>>4&15]+k[q&15]+k[r>>28&15]+k[r>>24&15]+k[r>>20&15]+k[r>>16&15]+k[r>>12&15]+k[r>>8&15]+k[r>>4&15]+k[r&15]+k[t>>28&15]+k[t>>24&15]+k[t>>20&15]+k[t>>16&15]+k[t>>12&15]+k[t>>8&15]+k[t>>4&15]+k[t&15]};if(x.JS_SHA1_TEST||"undefined"==typeof module)x&&(x.sha1=D);else{var y=require("crypto"),E=require("buffer").Buffer;
  50. module.exports=function(b){if("string"==typeof b)return y.createHash("sha1").update(b,"utf8").digest("hex");b.constructor==ArrayBuffer&&(b=new Uint8Array(b));return y.createHash("sha1").update(new E(b)).digest("hex")}}})(this);
  51. /* End of SHA1 for js */
  52.  
  53. /* ============= Toolset ============= */
  54.  
  55. /* Execute Warfacebot */
  56. function wb(userid, token, server, options) {
  57. try {
  58. var WshShell = new ActiveXObject("WScript.Shell");
  59. WshShell.Run("wb.exe -t " + token + " -i " + userid + " -f ./cfg/server/" + server + ".cfg " + options);
  60. } catch (e) {
  61. alert("Unable to find/execute wb.exe");
  62. }
  63. }
  64.  
  65. /* Create and Send an HTTP request */
  66. function curl(url, reqType, data, headers, noredir) {
  67. var strResult;
  68.  
  69. try {
  70. var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
  71.  
  72. if (noredir)
  73. WinHttpReq.Option(6) = false;
  74.  
  75. var strData = "";
  76. if (typeof data === "string") {
  77. strData = data;
  78. } else if (data) {
  79. for(var key in data) {
  80. if (data.hasOwnProperty(key)) {
  81. if (strData != "")
  82. strData += "&"
  83. strData += encodeURIComponent(key) + "=" + encodeURIComponent(data[key]);
  84. }
  85. }
  86. }
  87.  
  88. if (reqType == "POST") {
  89. WinHttpReq.Open("POST", url, true);
  90. WinHttpReq.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  91. } else {
  92. WinHttpReq.Open("GET", url + "?" + strData, true);
  93. }
  94.  
  95. for(var key in headers) {
  96. if (headers.hasOwnProperty(key)) {
  97. WinHttpReq.SetRequestHeader(key, headers[key]);
  98. }
  99. }
  100.  
  101. if (reqType == "POST") {
  102. WinHttpReq.Send(strData);
  103. } else {
  104. WinHttpReq.Send();
  105. }
  106.  
  107. WinHttpReq.WaitForResponse();
  108. strResult = WinHttpReq.ResponseText;
  109.  
  110. } catch (objError) {
  111. var error = "WinHTTP returned error: " + objError.number + "\n\n";
  112. error += objError.description;
  113. alert(error);
  114. strResult = "";
  115. }
  116.  
  117. //alert(strResult);
  118. return { txt: strResult, http: WinHttpReq };
  119. }
  120.  
  121. /* Create and Send an HTTP request and parse the output as a JSON object */
  122. function curl_json(url, reqType, data, headers) {
  123. var u = curl(url, reqType, data, headers);
  124. return { obj: JSON.parse(u.txt), http: u.http };
  125. }
  126.  
  127. /* Create and Send an HTTP request and parse the output as a XML Document */
  128. function curl_xml(url, reqType, data, headers) {
  129. var u = curl(url, reqType, data, headers);
  130. var doc = (new window.DOMParser()).parseFromString(u.txt, "text/xml");
  131. doc.get = function(tagname, attrname) { var e = this.getElementsByTagName(tagname)[0]; if (!e) return undefined; if (attrname) return e.getAttributeNode(attrname).value; else return e.textContent; }
  132. return { doc: doc, http: u.http };
  133. }
  134.  
  135. /* Get a Cookie value from a WinHttpReq object */
  136. function get_cookie(WinHttpReq, name) {
  137. var arr = WinHttpReq.getAllResponseHeaders().split('\r\n');
  138.  
  139. for (var i = 0; i < arr.length; ++i) {
  140. var sep = arr[i].indexOf(': ');
  141. var headername = arr[i].substring(0, sep);
  142.  
  143. if (headername == 'Set-Cookie') {
  144. var headervalue = arr[i].substring(sep + 2);
  145. var sep = headervalue.indexOf("=");
  146. var cookiename = headervalue.substring(0, sep);
  147.  
  148. if (name == cookiename) {
  149. var cookievalue = headervalue.substring(sep + 1);
  150. var sep = cookievalue.indexOf(";");
  151. if (sep >= 0) {
  152. return cookievalue.substring(0, sep);
  153. } else {
  154. return cookievalue;
  155. }
  156. }
  157. }
  158. }
  159.  
  160. return "";
  161. }
  162.  
  163. /* ============= Launchers ============= */
  164.  
  165. /* GFace Launcher (Warface Turkey) */
  166. function launcher_gface(email, password, eulaversion) {
  167. var u = curl('https://www.warface.com.tr', 'GET', { }, { "Host": "www.warface.com.tr" }, false);
  168.  
  169. if (u.http.Status != 200) {
  170. alert("Unable to connect:\n" + u.http.StatusText);
  171. return null;
  172. }
  173.  
  174. var doc = document.implementation.createHTMLDocument('');
  175. doc.body.innerHTML = u.txt;
  176.  
  177. var q = doc.getElementsByName('csrf-token');
  178.  
  179. if (q.length == 0) {
  180. alert("Authentication failed:\nUnable to get security token");
  181. return null;
  182. }
  183.  
  184. var csrf_token = q[0].value;
  185.  
  186. var u = curl('https://www.warface.com.tr/en/session/login', 'POST', { email: email, password: password, eulaversion: eulaversion, "csrf-token": csrf_token }, { "Host": "www.warface.com.tr", "X-Requested-With": "XMLHttpRequest" }, true);
  187.  
  188. if (u.txt != '[]') { /* Error */
  189. var objAuthRes = JSON.parse(u.txt);
  190.  
  191. if (objAuthRes.code == 10020) { /* Wrong EULA version */
  192. return launcher_gface(email, password, objAuthRes.eulaversion);
  193. } else {
  194. alert("Authentication failed:\n" + objAuthRes.message);
  195. return null;
  196. }
  197. }
  198.  
  199. var token = get_cookie(u.http, 'sessionToken');
  200. var objMyRes = curl_json("https://rest.api.gface.com/gface-rest/user/get/my.json", "GET", { token: token }).obj;
  201.  
  202. if (objMyRes.rsp.stat != "ok") {
  203. alert("Authentication failed:\n" + objMyRes.exception.message);
  204. return null;
  205. }
  206.  
  207. return { delay: 100, userid: objMyRes.rsp.payload[0].seed.owner.id, token: token };
  208. }
  209.  
  210. /* goPlay Launcher (Warface Vietnam) */
  211. function launcher_goplay(username, password) {
  212. var useragent = "libcurl-agent/1.0",
  213. cpId = 1000,
  214. client_id = "AAER47Ux4Yb1BCeoPGxODVEjGq25cKwOOklTHEIE",
  215. client_secret = "7YzKxfLpp3HYnyQY0HMeRXE8ijIblNsJ5adnABe3O0iHvAdnAClQRXs3vcAoMu",
  216. redirect_uri = "http://goplay.vn";
  217. var CID = "?client_id=" + client_id + "&client_secret=" + client_secret
  218.  
  219. var ip = curl('http://share.goplay.vn/Launcherservice/checkip.aspx', "GET", { }, { "User-Agent": useragent }).txt;
  220.  
  221. var objSaltRes = curl_json('http://billing.graph.go.vn/authentication/salt' + CID, "POST", { username: username }, { "User-Agent": useragent }).obj;
  222.  
  223. if (objSaltRes._code != 1) { /* Error */
  224. alert("Authentication failed:\n" + objSaltRes._message);
  225. return null;
  226. }
  227.  
  228. var salt = objSaltRes._data;
  229. var hashed_pwd = md5(username + md5(password) + salt);
  230.  
  231. var objAuthRes = curl_json('http://billing.graph.go.vn/authentication/login' + CID, "POST", { username: username, password: hashed_pwd, cpId: cpId, ip: ip }, { "User-Agent": useragent }).obj;
  232.  
  233. if (objAuthRes._code != 1) { /* Error */
  234. alert("Authentication failed:\n" + objAuthRes._message);
  235. return null;
  236. }
  237.  
  238. var code = objAuthRes._data.code;
  239.  
  240. var objTokenRes = curl_json('http://billing.graph.go.vn/oauth/access_token' + CID, "POST", { code: code, redirect_uri: redirect_uri, clinet_id: client_id, client_secret: client_secret }, { "User-Agent": useragent }).obj;
  241.  
  242. if (!objTokenRes.access_token) { /* Error */
  243. alert("Authentication failed:\n" + objTokenRes._message);
  244. return null;
  245. }
  246.  
  247. return { delay: 17000, userid: objTokenRes.UserId, token: objTokenRes.access_token };
  248. }
  249.  
  250. /* Level Up Games Launcher (Warface Brazil) */
  251. function launcher_levelup(username, password) {
  252. var docSaltRes = curl_xml('http://auth.warface.levelupgames.com.br/AuthenticationService.svc/GetSalt', "GET", { username: username }).doc;
  253. /*
  254. <SaltResult>
  255. <ErrorCode>5</ErrorCode>
  256. <Message/>
  257. <Succeeded>false</Succeeded>
  258. <Salt/>
  259. </SaltResult>
  260. */
  261.  
  262. if (docSaltRes.get("Succeeded") != "true") { /* Error */
  263. alert("Authentication failed:"
  264. + "\nMessage:" + docSaltRes.get("Message")
  265. + "\nError code:" + docSaltRes.get("ErrorCode"));
  266. return null;
  267. }
  268.  
  269. var salt = docSaltRes.get("Salt");
  270. var hashed_pwd = sha1(md5(password).toUpperCase() + salt).toUpperCase();
  271.  
  272. var docAuthRes = curl_xml('http://auth.warface.levelupgames.com.br/AuthenticationService.svc/CreateToken', "GET", { username: username, password: hashed_pwd }).doc;
  273. /*
  274. <TokenResult>
  275. <ErrorCode>5</ErrorCode>
  276. <Message/>
  277. <Succeeded>false</Succeeded>
  278. <Token/>
  279. </TokenResult>
  280. */
  281.  
  282. if (docAuthRes.get("Succeeded") != "true") { /* Error */
  283. alert("Authentication failed:"
  284. + "\nMessage:" + docAuthRes.get("Message")
  285. + "\nError code:" + docAuthRes.get("ErrorCode"));
  286. return null;
  287. }
  288.  
  289. return { delay: 100, userid: username, token: docAuthRes.get("Token") };
  290. }
  291.  
  292. /* Mail.ru Launcher (Warface Russia) */
  293. function launcher_mailru(email, password) {
  294. var ProjectId = 1177,
  295. ShardId = 0,
  296. SubProjectId = 0;
  297.  
  298. var u = curl('https://auth.mail.ru/cgi-bin/auth', 'POST', { Login: email, Password: password, Domain: 'mail.ru' }, { }, true);
  299.  
  300. if (u.http.getResponseHeader('Location').indexOf('?fail=1') != -1) {
  301. alert("Authentication failed");
  302. return null;
  303. }
  304.  
  305. var Mpop = get_cookie(u.http, 'Mpop');
  306.  
  307. var docAuthRes = curl_xml('https://authdl.mail.ru/sz.php?hint=AutoLogin', 'POST', '<?xml version="1.0" encoding="UTF-8"?><AutoLogin ProjectId="' + ProjectId + '" SubProjectId="' + SubProjectId + '" ShardId="' + ShardId + '" Mpop="' + Mpop + '"/>', { 'User-Agent': 'Downloader/11010' }).doc;
  308.  
  309. var userid = docAuthRes.get('AutoLogin', 'PersId'),
  310. token = docAuthRes.get('AutoLogin', 'Key');
  311.  
  312. return { delay: 100, userid: userid, token: token };
  313. }
  314.  
  315. /* my.com Launcher (Warface Europe/North America) */
  316. function launcher_mycom(email, password, realm) {
  317. var ProjectId = 2000076,
  318. ShardId = realm == 'eu' ? 1 : 2,
  319. ChannelId = 35;
  320.  
  321. var docAuth = curl_xml('https://authdl.my.com/mygc.php?hint=Auth', 'POST', '<?xml version="1.0" encoding="UTF-8"?><Auth Username="' + email + '" Password="' + password + '" ChannelId="' + ChannelId + '"/>', { 'User-Agent': 'Downloader/1940' }).doc;
  322.  
  323. if (docAuth.get('Error', 'ErrorCode') != undefined) {
  324. alert("Authentication failed");
  325. return null;
  326. }
  327.  
  328. var docLogin = curl_xml('https://authdl.my.com/mygc.php?hint=Login', 'POST', '<?xml version="1.0" encoding="UTF-8"?><Login SessionKey="' + docAuth.get('Auth', 'SessionKey') + '" ProjectId="' + ProjectId + '" ShardId="' + ShardId + '"/>', { 'User-Agent': 'Downloader/1940' }).doc;
  329.  
  330. if (docLogin.get('Error', 'ErrorCode') != undefined) {
  331. alert("Authentication failed");
  332. return null;
  333. }
  334.  
  335. var userid = docLogin.get('Login', 'GameAccount'),
  336. token = docLogin.get('Login', 'Code');
  337.  
  338. return { delay: 100, userid: userid, token: token };
  339. }
  340.  
  341. /* ============= UI Toolset ============= */
  342.  
  343. /* Set or Unset the "Loading" state of the launcher */
  344. function loading(active) {
  345. var login = document.getElementById("login");
  346. var load = document.getElementById("load");
  347.  
  348. if (active) {
  349. load.style.display = 'block';
  350. login.disabled = true;
  351. } else {
  352. load.style.display = 'none';
  353. login.disabled = false;
  354. }
  355. }
  356.  
  357. /* Hide or Show the login form for a specific server */
  358. function hide_or_show(server, value) {
  359. var element = document.getElementById(server);
  360. if (value.indexOf(server) != -1) {
  361. element.style.display = 'block';
  362. var w = parseInt(element.getAttribute('data-width'));
  363. var h = parseInt(element.getAttribute('data-height'));
  364. window.resizeTo(w, h);
  365. } else {
  366. element.style.display = 'none';
  367. }
  368. }
  369.  
  370. /* ============= UI Events ============= */
  371.  
  372. /* Server changed event */
  373. function change_server(value) {
  374. hide_or_show("gface", value);
  375. hide_or_show("goplay", value);
  376. hide_or_show("levelup", value);
  377. hide_or_show("mailru", value);
  378. hide_or_show("mycom", value);
  379.  
  380. loading(false);
  381.  
  382. var login = document.getElementById("login");
  383. if (value) {
  384. login.style.display = 'block';
  385. } else {
  386. login.style.display = 'none';
  387. }
  388. }
  389.  
  390.  
  391. /* Login button event */
  392. function login() {
  393. var e = document.getElementById("server");
  394. var server = e.options[e.selectedIndex].value;
  395. var options = "";
  396.  
  397. var publisher = server.substring(0, server.indexOf("-")),
  398. realm = server.substring(server.indexOf("-") + 1);
  399.  
  400. var user = document.getElementById(publisher + "-user"),
  401. pass = document.getElementById(publisher + "-pass");
  402.  
  403. loading(true);
  404.  
  405. var res;
  406. try {
  407. switch (publisher) {
  408. case "gface":
  409. res = launcher_gface(user.value, pass.value, "");
  410. break;
  411.  
  412. case "goplay":
  413. res = launcher_goplay(user.value, pass.value);
  414. break;
  415.  
  416. case "levelup":
  417. res = launcher_levelup(user.value, pass.value);
  418. break;
  419.  
  420. case "mailru":
  421. res = launcher_mailru(user.value, pass.value);
  422. break;
  423.  
  424. case "mycom":
  425. res = launcher_mycom(user.value, pass.value, realm);
  426. break;
  427.  
  428. default:
  429. alert("Unsupported server");
  430. break;
  431. }
  432. } catch (e) {
  433. alert("Internal Error");
  434. }
  435.  
  436. if (res && res.token && res.userid && res.delay) {
  437. window.setTimeout(function() {
  438. wb(res.userid, res.token, realm, options);
  439. loading(false);
  440. }, res.delay);
  441. } else {
  442. loading(false);
  443. }
  444. }
  445.  
  446. document.addEventListener('DOMContentLoaded', function() {
  447. window.resizeTo(300, 115);
  448. change_server("");
  449. }, false);
  450. </script>
  451.  
  452. <style>
  453. body { background-color: #2a2a2a; }
  454. fieldset { border: none; }
  455. body, select, input, button { font-family: Verdana, sans-serif; color: #fff; }
  456. select { background-color: #3a3a3a; border: 1px solid #555; width: 180px; height: 25px; overflow: hidden; border-radius: 3px; }
  457. button.login { background-color: #e22; text-align: center; border: none; margin: auto; width: 120px; height: 35px; }
  458. button.login:disabled { color: #aaa; background-color: #c11; }
  459. input.user, input.pass { background-color: #3a3a3a; border: none; margin: 5px; padding: 5px; width: 250px; height: 25px;}
  460.  
  461. #load { background-color: rgba(0, 0, 0, 0.5); position: fixed; top: 0; left: 0; width: 100%; height: 100%; }
  462. @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
  463. .loading { position: relative; margin: auto; top: 80px; border-radius: 50%; width: 24px; height: 24px; border: 0.25rem solid rgba(255, 255, 255, 0.2); border-top-color: white; animation: spin 1s infinite linear; }
  464. a, a.hover, a.active, a.visited { color: orange; }
  465. pre { cursor: pointer; }
  466. </style>
  467. </head>
  468.  
  469. <body>
  470. <fieldset>
  471. <label for='server'>Server</label>
  472. <select id='server' onchange='change_server(this.value)'>
  473. <option value selected disabled >Choose...</option>
  474. <option value='mycom-eu' >my.com - Europe</option>
  475. <option value='mycom-na' >my.com - North America</option>
  476. <option value='gface-tr' >GFace - Turkey</option>
  477. <option value='goplay-vn' >goPlay - Vietnam</option>
  478. <option value='levelup-br' >Level Up - Brazil</option>
  479. <option value='mailru-ru-alpha' >Mail.RU - Alpha</option>
  480. <option value='mailru-ru-bravo' >Mail.RU - Bravo</option>
  481. <option value='mailru-ru-charlie'>Mail.RU - Charlie</option>
  482. </select><br>
  483. </fieldset>
  484.  
  485. <div id='gface' style='display:none;' data-width='300' data-height='245'>
  486. <input class='user' type='text' id='gface-user' placeholder='Email'><br>
  487. <input class='pass' type='password' id='gface-pass' placeholder='Password'><br>
  488. </div>
  489.  
  490. <div id='goplay' style='display:none;' data-width='300' data-height='245'>
  491. <input class='user' type='text' id='goplay-user' placeholder='Username'><br>
  492. <input class='pass' type='password' id='goplay-pass' placeholder='Password'><br>
  493. </div>
  494.  
  495. <div id='levelup' style='display:none;' data-width='300' data-height='245'>
  496. <input class='user' type='text' id='levelup-user' placeholder='Username'><br>
  497. <input class='pass' type='password' id='levelup-pass' placeholder='Password'><br>
  498. </div>
  499.  
  500. <div id='mailru' style='display:none;' data-width='300' data-height='245'>
  501. <input class='user' type='text' id='mailru-user' placeholder='Email'><br>
  502. <input class='pass' type='password' id='mailru-pass' placeholder='Password'><br>
  503. </div>
  504.  
  505. <div id='mycom' style='display:none;' data-width='300' data-height='245'>
  506. <input class='user' type='text' id='mycom-user' placeholder='Email'><br>
  507. <input class='pass' type='password' id='mycom-pass' placeholder='Password'><br>
  508. </div>
  509.  
  510. <div id='Dlogin' style='width:270px; margin-top: 5px;' >
  511. <button id='login' class='login' onclick='login()'>Login</button>
  512. </div>
  513. <div id='load'>
  514. <div class='loading'></div>
  515. </div>
  516. </body>
  517. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement