home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / filD181A8B5D4214E8771B3FD949495DB14 < prev    next >
Text File  |  2010-07-12  |  10KB  |  343 lines

  1. const Cc = Components.classes;
  2. const Ci = Components.interfaces;
  3.  
  4. function nsIYaPassManager() {
  5.   this.wrappedJSObject = this;
  6. };
  7.  
  8. nsIYaPassManager.prototype = {
  9.   _CID: Components.ID("{7a19ec9e-54e4-4099-ae92-ac3628c67889}"),
  10.   _contractID: "@mozilla.org/autocomplete/search;1?name=YasearchPassComplete",
  11.   _className: "YasearchPassManager Autocomplete",
  12.  
  13.   QueryInterface: function(aIID) { 
  14.     if (!aIID.equals(Ci.nsIAutoCompleteSearch) &&
  15.         !aIID.equals(Ci.nsISupports))
  16.       throw Components.results.NS_ERROR_NO_INTERFACE;
  17.     return this;
  18.   },
  19.   
  20.   get loginManager() {
  21.     return Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
  22.   },
  23.   
  24.   _defaultUserPrefName: "yasearch.users.default",
  25.   
  26.   get onHoverTreeUglyHack() {
  27.     return this.__onHoverTreeUglyHack;
  28.   },
  29.   
  30.   set onHoverTreeUglyHack(val) {
  31.     this.__onHoverTreeUglyHack = !!val;
  32.     return this.__onHoverTreeUglyHack;
  33.   },
  34.   
  35.   startSearch: function(aSearchString, aSearchParam, aPreviousResult, aListener) {
  36.     let candidats = [];
  37.     
  38.     if (aSearchString) {
  39.       for each (let login in this.savedLogins)
  40.         if (login.indexOf(aSearchString) == 0)
  41.           candidats.push(login);
  42.     } else {
  43.       candidats = this.savedLogins;
  44.     }
  45.     
  46.     let me = this;
  47.     
  48.     let result = {
  49.       QueryInterface: function(aIID) {
  50.         if (aIID.equals(Ci.nsIAutoCompleteSearch) || aIID.equals(Ci.nsISupports))
  51.           return this;
  52.         
  53.         throw Components.results.NS_NOINTERFACE;
  54.       },
  55.       
  56.       results: candidats,
  57.       defaultIndex: 0,
  58.       errorDescription: null,
  59.       matchCount:    candidats.length,
  60.       searchResult:  Ci.nsIAutoCompleteResult[candidats.length ? "RESULT_SUCCESS" : "RESULT_NOMATCH"],
  61.       searchString:  aSearchString,
  62.       getCommentAt:  function(index) { return ""; },
  63.       getStyleAt:    function(index) {
  64.         return me.onHoverTreeUglyHack ? "commentColumnHover" : "";
  65.       },
  66.       getImageAt: function(index) { return ""; },
  67.       getValueAt:    function(index) { return this.results[index]; },
  68.       removeValueAt: function(rowIndex, removeFromDb) {}
  69.     }
  70.     
  71.     aListener.onSearchResult(this, result);
  72.   },
  73.   
  74.   stopSearch: function() {},
  75.   
  76.   _getLoginChromeURL: function(aType) {
  77.     if (aType == "mfd")
  78.       return "chrome://yasearch/mfd/";
  79.     
  80.     return "chrome://yasearch/";
  81.   },
  82.   
  83.   _savedLogins: null,
  84.   
  85.   resetSavedLogins: function() {
  86.     this.savedLogins = null;
  87.   },
  88.   
  89.   set savedLogins(val) {
  90.     if (val !== null)
  91.       throw "YasearchPassComplete.savedLogins must be null";
  92.     
  93.     this._savedLogins = null;
  94.   },
  95.   
  96.   get savedLogins() {
  97.     return this._savedLogins || (this._savedLogins = this._getSavedLogins());
  98.   },
  99.   
  100.   _getSavedLogins: function(aTypesArray) {
  101.     let logins = [];
  102.     
  103.     let types = aTypesArray || ["mfd", "yandex"];
  104.     
  105.     types.forEach(function(aType) {
  106.       let chromeURL = this._getLoginChromeURL(aType);
  107.       logins = logins.concat(this.loginManager.findLogins({}, chromeURL, chromeURL, null)
  108.                                  .map(function(login) login.username));
  109.     }, this);
  110.     
  111.     return logins.sort();
  112.   },
  113.   
  114.   get hasSavedLogins() {
  115.     return !!this.savedLogins.length;
  116.   },
  117.   
  118.   _prepeareUsername: function(aUsername, aType) {
  119.     if (aType == "mfd")
  120.       return aUsername;
  121.     
  122.     function toLowerWithoutDots(aString) {
  123.       return aString.toLowerCase().replace(/\./g, "-");
  124.     }
  125.     
  126.     let usernameLower = toLowerWithoutDots(aUsername);
  127.     let savedLogins = this.savedLogins;
  128.     
  129.     return savedLogins.filter(function(aLogin) {
  130.              return aLogin === aUsername;
  131.            })[0] ||
  132.            savedLogins.filter(function(aLogin) {
  133.              return toLowerWithoutDots(aLogin) === usernameLower;
  134.            })[0] ||
  135.            savedLogins.filter(function(aLogin) {
  136.              return aLogin.split("@")[0] === aUsername;
  137.            })[0] ||
  138.            savedLogins.filter(function(aLogin) {
  139.              return toLowerWithoutDots(aLogin).split("@")[0] === usernameLower;
  140.            })[0] ||
  141.            aUsername;
  142.   },
  143.   
  144.   _loginManagerFindLogin: function(aUsername, aType) {
  145.     let types = aType ? [aType] : ["mfd", "yandex"];
  146.     
  147.     for each (let [index, type] in Iterator(types)) {
  148.       let chromeURL = this._getLoginChromeURL(type);
  149.       let storedLogins = this.loginManager.findLogins({}, chromeURL, chromeURL, null);
  150.       
  151.       for (let i = 0, len = storedLogins.length; i < len; i++) {
  152.         let username = storedLogins[i].username;
  153.         if (username == aUsername || (type == "yandex" && username.split("@")[0] == aUsername)) {
  154.           return storedLogins[i];
  155.         }
  156.       }
  157.     }
  158.     
  159.     return null;
  160.   },
  161.   
  162.   _removeUserData: function(aUsername, aType) {
  163.     let login = this._loginManagerFindLogin(aUsername, aType);
  164.     
  165.     if (!login)
  166.       return false;
  167.     
  168.     this.loginManager.removeLogin(login);
  169.     
  170.     return true;
  171.   },
  172.   
  173.   notifyObservers: function() {
  174.     Cc["@mozilla.org/observer-service;1"]
  175.         .getService(Ci.nsIObserverService)
  176.         .notifyObservers(null, "Ya-Refresh-Data", "login");
  177.   },
  178.   
  179.   removeUserData: function(aUsername, aType) {
  180.     let username = this._prepeareUsername(aUsername, aType);
  181.     
  182.     this.resetSavedLogins();
  183.     
  184.     if (this._removeUserData(username, aType))
  185.       this.notifyObservers();
  186.     
  187.     if (aType == "yandex") {
  188.       try {
  189.         const prefBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
  190.         if (username == prefBranch.getCharPref(this._defaultUserPrefName))
  191.           prefBranch.clearUserPref(this._defaultUserPrefName);
  192.       } catch(e) {}
  193.     }
  194.   },
  195.   
  196.   getStoredPassword: function(aUsername) {
  197.     let login = this._loginManagerFindLogin(this._prepeareUsername(aUsername, "mfd"), "mfd") ||
  198.                 this._loginManagerFindLogin(this._prepeareUsername(aUsername, "yandex"), "yandex");
  199.     
  200.     return login ? login.password : null;
  201.   },
  202.   
  203.   getSavedLoginInfo: function(aUsername) {
  204.     let result = {
  205.       password: null,
  206.       type: "yandex"
  207.     };
  208.     
  209.     let login = this._loginManagerFindLogin(this._prepeareUsername(aUsername, "mfd"), "mfd");
  210.     if (login)
  211.       result.type = "mfd";
  212.     else
  213.       login = this._loginManagerFindLogin(this._prepeareUsername(aUsername, "yandex"), "yandex");
  214.     
  215.     if (!login)
  216.       return null;
  217.     
  218.     result.password = login.password;
  219.     
  220.     return result;
  221.   },
  222.   
  223.   getSavedLoginsInfo: function(aTypesArray) {
  224.     let logins = [];
  225.     
  226.     let types = aTypesArray || ["yandex", "mfd"];
  227.     
  228.     types.forEach(function(aType) {
  229.       let chromeURL = this._getLoginChromeURL(aType);
  230.       let storedLogins = this.loginManager.findLogins({}, chromeURL, chromeURL, null);
  231.       
  232.       for (let i = 0, len = storedLogins.length; i < len; i++) {
  233.         let l = storedLogins[i];
  234.         logins.push({
  235.           username: l.username,
  236.           password: l.password,
  237.           type: aType
  238.         });
  239.       }
  240.     }, this);
  241.     
  242.     return logins;
  243.   },
  244.   
  245.   removeAllUsersData: function() {
  246.     this.savedLogins.forEach(function(aUsername) {
  247.       this._removeUserData(aUsername);
  248.     }, this);
  249.     
  250.     try {
  251.       const prefBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
  252.       prefBranch.clearUserPref(this._defaultUserPrefName);
  253.     } catch(e) {}
  254.     
  255.     this.resetSavedLogins();
  256.   },
  257.   
  258.   storeLoginDetails: function(aUsername, aPassword, aStore, aType) {
  259.     if (aType == "mfd")
  260.       aUsername = aUsername.toLowerCase();
  261.     
  262.     this.removeUserData(aUsername, aType);
  263.     
  264.     if (aStore) {
  265.       const nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init");
  266.       
  267.       let chromeURL = this._getLoginChromeURL(aType);
  268.       let loginInfo = new nsLoginInfo(chromeURL, chromeURL, null, aUsername, aPassword, "", "");
  269.       
  270.       this.loginManager.addLogin(loginInfo);
  271.       
  272.       if (aType == "yandex") {
  273.         const prefBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
  274.         prefBranch.setCharPref(this._defaultUserPrefName, aUsername);
  275.       }
  276.       
  277.       this.resetSavedLogins();
  278.       
  279.       this.notifyObservers();
  280.     }
  281.   }
  282. }; 
  283.  
  284. var objects = [nsIYaPassManager]; 
  285.  
  286. function FHolder(aObj) { 
  287.   this.CID        = aObj.prototype._CID; 
  288.   this.contractID = aObj.prototype._contractID; 
  289.   this.className  = aObj.prototype._className; 
  290.   
  291.   this.factory = {
  292.     createInstance: function(aOuter, aIID) {
  293.       if (aOuter !== null)
  294.         throw Components.results.NS_ERROR_NO_AGGREGATION;
  295.       return (new this.constructor).QueryInterface(aIID);
  296.     }
  297.   };
  298.   
  299.   this.factory.constructor = aObj; 
  300.  
  301. var gModule = {
  302.   _objects: {},
  303.   
  304.   registerSelf: function (aComponentManager, aFileSpec, aLocation, aType) {
  305.     aComponentManager.QueryInterface(Ci.nsIComponentRegistrar);
  306.     for (var key in this._objects) {
  307.       var obj = this._objects[key];
  308.       aComponentManager.registerFactoryLocation(obj.CID, obj.className, obj.contractID, aFileSpec, aLocation, aType); 
  309.     }
  310.   },
  311.   
  312.   unregisterSelf: function(aComponentManager, aFileSpec, aLocation) {
  313.     aComponentManager.QueryInterface(Ci.nsIComponentRegistrar);
  314.     for (var key in this._objects) {
  315.       var obj = this._objects[key];
  316.       aComponentManager.unregisterFactoryLocation(obj.CID, aFileSpec);
  317.     }
  318.   },
  319.   
  320.   getClassObject: function(aComponentManager, aCID, aIID) {
  321.     if (!aIID.equals(Ci.nsIFactory))
  322.       throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  323.     
  324.     for (var key in this._objects) {
  325.       if (aCID.equals(this._objects[key].CID))
  326.         return this._objects[key].factory;
  327.     }
  328.     
  329.     throw Components.results.NS_ERROR_NO_INTERFACE;
  330.   },
  331.   
  332.   canUnload: function(aComponentManager) {
  333.     return true;
  334.   }
  335. };
  336.  
  337. function NSGetModule(compMgr, fileSpec) {
  338.   for (var i in objects)
  339.     gModule._objects[i] = new FHolder(objects[i]);
  340.   
  341.   return gModule;
  342. }