Esempio n. 1
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr  = new StreamReader(sInput, StrUtil.Utf8, true);
            string       str = sr.ReadToEnd();

            sr.Close();

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;

            CsvStreamReaderEx csr = new CsvStreamReaderEx(str, opt);

            while (true)
            {
                string[] vLine = csr.ReadLine();
                if (vLine == null)
                {
                    break;
                }

                AddEntry(vLine, pwStorage);
            }
        }
Esempio n. 2
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr  = new StreamReader(sInput, Encoding.Default, true);
            string       str = sr.ReadToEnd();

            sr.Close();

            CsvOptions opt = new CsvOptions();

            // Backslashes are not escaped, even though "\\n" is used
            // to encode new-line characters
            opt.BackslashIsEscape = false;
            opt.FieldSeparator    = ';';

            CsvStreamReaderEx            csr     = new CsvStreamReaderEx(str, opt);
            Dictionary <string, PwGroup> dGroups = new Dictionary <string, PwGroup>();

            while (true)
            {
                string[] vLine = csr.ReadLine();
                if (vLine == null)
                {
                    break;
                }

                AddEntry(vLine, pwStorage, dGroups);
            }
        }
Esempio n. 3
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr      = new StreamReader(sInput, StrUtil.Utf8, true);
            string       strData = sr.ReadToEnd();

            sr.Close();

            // The Chrome extension of LastPass 4.1.35 encodes some
            // special characters as XML entities; the web version and
            // the Firefox extension do not do this
            strData = strData.Replace(@"&lt;", @"<");
            strData = strData.Replace(@"&gt;", @">");
            strData = strData.Replace(@"&amp;", @"&");

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;

            CsvStreamReaderEx csr = new CsvStreamReaderEx(strData, opt);

            while (true)
            {
                string[] vLine = csr.ReadLine();
                if (vLine == null)
                {
                    break;
                }

                AddEntry(vLine, pwStorage);
            }
        }
Esempio n. 4
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr  = new StreamReader(sInput, StrUtil.Utf8, true);
            string       str = sr.ReadToEnd();

            sr.Close();

            // All fields are enclosed in '"', however '"' in data is
            // not encoded (broken format)

            str = str.Trim();
            str = StrUtil.NormalizeNewLines(str, false);             // To Unix
            char chFieldSep = StrUtil.GetUnusedChar(str);

            str = str.Replace("\",\"", new string(chFieldSep, 1));
            char chRecSep = StrUtil.GetUnusedChar(str);

            str = str.Replace("\"\n\"", new string(chRecSep, 1));
            if (str.StartsWith("\"") && str.EndsWith("\"") && (str.Length >= 2))
            {
                str = str.Substring(1, str.Length - 2);
            }
            else
            {
                Debug.Assert(false);
            }
            if (!NativeLib.IsUnix())
            {
                str = StrUtil.NormalizeNewLines(str, true);
            }

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;
            opt.FieldSeparator    = chFieldSep;
            opt.RecordSeparator   = chRecSep;
            opt.TextQualifier     = char.MinValue;

            CsvStreamReaderEx csr = new CsvStreamReaderEx(str, opt);

            while (true)
            {
                string[] vLine = csr.ReadLine();
                if (vLine == null)
                {
                    break;
                }

                AddEntry(vLine, pwStorage);
            }
        }
Esempio n. 5
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr      = new StreamReader(sInput, Encoding.Unicode, true);
            string       strData = sr.ReadToEnd();

            sr.Close();

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);

            while (true)
            {
                string[] v = csv.ReadLine();
                if (v == null)
                {
                    break;
                }
                if (v.Length < 5)
                {
                    continue;
                }

                if (v[0].Equals("url", StrUtil.CaseIgnoreCmp) &&
                    v[1].Equals("username", StrUtil.CaseIgnoreCmp) &&
                    v[2].Equals("password", StrUtil.CaseIgnoreCmp))
                {
                    continue;                     // Header
                }
                PwGroup pg       = pwStorage.RootGroup;
                string  strGroup = v[4];
                if (!string.IsNullOrEmpty(strGroup))
                {
                    pg = pg.FindCreateGroup(strGroup, true);
                }

                PwEntry pe = new PwEntry(true, true);
                pg.AddEntry(pe, true);

                ImportUtil.AppendToField(pe, PwDefs.UrlField, v[0], pwStorage);
                ImportUtil.AppendToField(pe, PwDefs.UserNameField, v[1], pwStorage);
                ImportUtil.AppendToField(pe, PwDefs.PasswordField, v[2], pwStorage);
                ImportUtil.AppendToField(pe, PwDefs.TitleField, v[3], pwStorage);
            }
        }
        public static Dictionary <string, bool> GetIfDevice(AutoExecItem item)
        {
            Dictionary <string, bool> result = new Dictionary <string, bool>();

            string strList = item.IfDevice;

            if (string.IsNullOrEmpty(strList))
            {
                return(result);
            }

            CsvOptions opt = new CsvOptions
            {
                BackslashIsEscape = false,
                TrimFields        = true
            };

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strList, opt);

            string[] vFlt = csv.ReadLine();
            if (vFlt == null)
            {
                Debug.Assert(false); return(result);
            }

            foreach (string strFlt in vFlt)
            {
                if (string.IsNullOrEmpty(strFlt))
                {
                    continue;
                }

                if (strFlt[0] == '!') // Exclusion
                {
                    result[strFlt.Substring(1).TrimStart()] = false;
                }
                else // Inclusion
                {
                    result[strFlt] = true;
                }
            }

            return(result);
        }
Esempio n. 7
0
		public override void Import(PwDatabase pwStorage, Stream sInput,
			IStatusLogger slLogger)
		{
			StreamReader sr = new StreamReader(sInput, StrUtil.Utf8, true);
			string strData = sr.ReadToEnd();
			sr.Close();

			CsvOptions opt = new CsvOptions();
			opt.BackslashIsEscape = false;

			CsvStreamReaderEx csr = new CsvStreamReaderEx(strData, opt);

			while(true)
			{
				string[] vLine = csr.ReadLine();
				if(vLine == null) break;

				AddEntry(vLine, pwStorage);
			}
		}
Esempio n. 8
0
		public override void Import(PwDatabase pwStorage, Stream sInput,
			IStatusLogger slLogger)
		{
			StreamReader sr = new StreamReader(sInput, Encoding.Unicode, true);
			string strData = sr.ReadToEnd();
			sr.Close();

			CsvOptions opt = new CsvOptions();
			opt.BackslashIsEscape = false;

			CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);

			while(true)
			{
				string[] v = csv.ReadLine();
				if(v == null) break;
				if(v.Length < 5) continue;

				if(v[0].Equals("url", StrUtil.CaseIgnoreCmp) &&
					v[1].Equals("username", StrUtil.CaseIgnoreCmp) &&
					v[2].Equals("password", StrUtil.CaseIgnoreCmp))
					continue; // Header

				PwGroup pg = pwStorage.RootGroup;
				string strGroup = v[4];
				if(!string.IsNullOrEmpty(strGroup))
					pg = pg.FindCreateGroup(strGroup, true);

				PwEntry pe = new PwEntry(true, true);
				pg.AddEntry(pe, true);

				ImportUtil.AppendToField(pe, PwDefs.UrlField, v[0], pwStorage);
				ImportUtil.AppendToField(pe, PwDefs.UserNameField, v[1], pwStorage);
				ImportUtil.AppendToField(pe, PwDefs.PasswordField, v[2], pwStorage);
				ImportUtil.AppendToField(pe, PwDefs.TitleField, v[3], pwStorage);
			}
		}
Esempio n. 9
0
		public override void Import(PwDatabase pwStorage, Stream sInput,
			IStatusLogger slLogger)
		{
			StreamReader sr = new StreamReader(sInput, StrUtil.Utf8, true);
			string str = sr.ReadToEnd();
			sr.Close();

			// All fields are enclosed in '"', however '"' in data is
			// not encoded (broken format)

			str = str.Trim();
			str = StrUtil.NormalizeNewLines(str, false); // To Unix
			char chFieldSep = StrUtil.GetUnusedChar(str);
			str = str.Replace("\",\"", new string(chFieldSep, 1));
			char chRecSep = StrUtil.GetUnusedChar(str);
			str = str.Replace("\"\n\"", new string(chRecSep, 1));
			if(str.StartsWith("\"") && str.EndsWith("\"") && (str.Length >= 2))
				str = str.Substring(1, str.Length - 2);
			else { Debug.Assert(false); }
			if(!NativeLib.IsUnix()) str = StrUtil.NormalizeNewLines(str, true);

			CsvOptions opt = new CsvOptions();
			opt.BackslashIsEscape = false;
			opt.FieldSeparator = chFieldSep;
			opt.RecordSeparator = chRecSep;
			opt.TextQualifier = char.MinValue;

			CsvStreamReaderEx csr = new CsvStreamReaderEx(str, opt);

			while(true)
			{
				string[] vLine = csr.ReadLine();
				if(vLine == null) break;

				AddEntry(vLine, pwStorage);
			}
		}
Esempio n. 10
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr      = new StreamReader(sInput, Encoding.Default);
            string       strData = sr.ReadToEnd();

            sr.Close();
            sInput.Close();

            Dictionary <string, PwGroup> dGroups = new Dictionary <string, PwGroup>();

            dGroups[string.Empty] = pwStorage.RootGroup;

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);

            while (true)
            {
                string[] v = csv.ReadLine();
                if (v == null)
                {
                    break;
                }
                if (v.Length == 0)
                {
                    continue;
                }
                if (v[0].StartsWith("TurboPasswords CSV Export File"))
                {
                    continue;
                }
                if (v.Length < 24)
                {
                    Debug.Assert(false); continue;
                }
                if ((v[0] == "Category") && (v[1] == "Type"))
                {
                    continue;
                }

                PwEntry pe = new PwEntry(true, true);

                PwGroup pg;
                string  strGroup = v[0];
                if (!dGroups.TryGetValue(strGroup, out pg))
                {
                    pg = new PwGroup(true, true, strGroup, PwIcon.Folder);
                    dGroups[string.Empty].AddGroup(pg, true);
                    dGroups[strGroup] = pg;
                }
                pg.AddEntry(pe, true);

                string strType = v[1];

                for (int f = 0; f < 6; ++f)
                {
                    string strKey   = v[2 + (2 * f)];
                    string strValue = v[2 + (2 * f) + 1];
                    if (strKey.Length == 0)
                    {
                        strKey = PwDefs.NotesField;
                    }
                    if (strValue.Length == 0)
                    {
                        continue;
                    }

                    if (strKey == "Description")
                    {
                        strKey = PwDefs.TitleField;
                    }
                    else if (((strType == "Contact") || (strType == "Personal Info")) &&
                             (strKey == "Name"))
                    {
                        strKey = PwDefs.TitleField;
                    }
                    else if (((strType == "Membership") || (strType == "Insurance")) &&
                             (strKey == "Company"))
                    {
                        strKey = PwDefs.TitleField;
                    }
                    else if (strKey == "SSN")
                    {
                        strKey = PwDefs.UserNameField;
                    }
                    else
                    {
                        string strMapped = ImportUtil.MapNameToStandardField(strKey, false);
                        if (!string.IsNullOrEmpty(strMapped))
                        {
                            strKey = strMapped;
                        }
                    }

                    ImportUtil.AppendToField(pe, strKey, strValue, pwStorage,
                                             ((strKey == PwDefs.NotesField) ? "\r\n" : ", "), false);
                }

                ImportUtil.AppendToField(pe, PwDefs.NotesField, v[20], pwStorage,
                                         "\r\n\r\n", false);
                if (v[21].Length > 0)
                {
                    ImportUtil.AppendToField(pe, "Login URL", v[21], pwStorage, null, true);
                }
            }
        }
Esempio n. 11
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr      = new StreamReader(sInput, Encoding.Default, true);
            string       strData = sr.ReadToEnd();

            sr.Close();

            CsvOptions o = new CsvOptions();

            o.BackslashIsEscape = false;

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, o);

            SortedDictionary <string, PwGroup> dictGroups =
                new SortedDictionary <string, PwGroup>();

            while (true)
            {
                string[] vLine = csv.ReadLine();
                if (vLine == null)
                {
                    break;
                }
                if (vLine.Length == 0)
                {
                    continue;
                }

                if (vLine.Length == 1)
                {
                    Debug.Assert(vLine[0] == StrHeader);
                    continue;
                }

                // Support old version 3.4
                if (vLine.Length == 9)
                {
                    string[] v = new string[13];
                    for (int i = 0; i < 7; ++i)
                    {
                        v[i] = vLine[i];
                    }
                    for (int i = 7; i < 11; ++i)
                    {
                        v[i] = string.Empty;
                    }
                    v[11] = vLine[7];
                    v[12] = vLine[8];

                    vLine = v;
                }

                if (vLine.Length == 13)
                {
                    ProcessCsvLine(vLine, pwStorage, dictGroups);
                }
                else
                {
                    Debug.Assert(false);
                }
            }
        }
Esempio n. 12
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr      = new StreamReader(sInput, StrUtil.Utf8, true);
            string       strData = sr.ReadToEnd();

            sr.Close();

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;
            opt.TextQualifier     = char.MinValue;
            opt.TrimFields        = true;

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);

            string strMapIgnore  = Guid.NewGuid().ToString();
            string strMapGroup   = Guid.NewGuid().ToString();
            string strMapTags    = Guid.NewGuid().ToString();
            string strMapLastMod = Guid.NewGuid().ToString();
            string strMapEMail   = Guid.NewGuid().ToString();

            Dictionary <string, string> dMaps = new Dictionary <string, string>(
                StrUtil.CaseIgnoreComparer);

            dMaps["title"]                  = PwDefs.TitleField;
            dMaps["type"]                   = strMapIgnore;
            dMaps["username_field"]         = strMapIgnore;
            dMaps["username"]               = PwDefs.UserNameField;
            dMaps["password_field"]         = strMapIgnore;
            dMaps["password"]               = PwDefs.PasswordField;
            dMaps["url"]                    = PwDefs.UrlField;
            dMaps["category"]               = strMapGroup;
            dMaps["note"]                   = PwDefs.NotesField;
            dMaps["autofill"]               = strMapIgnore;
            dMaps["autofillenabled"]        = strMapIgnore;
            dMaps["last_password_change"]   = strMapIgnore;
            dMaps["lastmodified"]           = strMapLastMod;
            dMaps["iban"]                   = PwDefs.UserNameField;
            dMaps["bic"]                    = "BIC";
            dMaps["banking_pin"]            = PwDefs.PasswordField;
            dMaps["card_number"]            = PwDefs.UserNameField;
            dMaps["card_holder"]            = "Card Holder";
            dMaps["card_pin"]               = PwDefs.PasswordField;
            dMaps["card_verification_code"] = "Verification Code";
            dMaps["valid_from"]             = "Valid From";
            dMaps["valid_thru"]             = "Valid To";
            dMaps["name"]                   = PwDefs.UserNameField;
            dMaps["firstname"]              = PwDefs.UserNameField;
            dMaps["street"]                 = PwDefs.NotesField;
            dMaps["houseno"]                = PwDefs.NotesField;
            dMaps["zip"]                    = PwDefs.NotesField;
            dMaps["city"]                   = PwDefs.NotesField;
            dMaps["mobile_phone"]           = PwDefs.NotesField;
            dMaps["phone"]                  = PwDefs.NotesField;
            dMaps["email"]                  = strMapEMail;
            dMaps["birthday"]               = "Birthday";
            dMaps["tags"]                   = strMapTags;
            dMaps["keyword"]                = strMapTags;

            string[] vNames = csv.ReadLine();
            if ((vNames == null) || (vNames.Length == 0))
            {
                Debug.Assert(false); return;
            }

            for (int i = 0; i < vNames.Length; ++i)
            {
                string str = vNames[i];

                if (string.IsNullOrEmpty(str))
                {
                    Debug.Assert(false); str = strMapIgnore;
                }
                else
                {
                    string strMapped = null;
                    dMaps.TryGetValue(str, out strMapped);

                    if (string.IsNullOrEmpty(strMapped))
                    {
                        Debug.Assert(false);
                        strMapped = ImportUtil.MapNameToStandardField(str, true);
                        if (string.IsNullOrEmpty(strMapped))
                        {
                            strMapped = PwDefs.NotesField;
                        }
                    }

                    str = strMapped;
                }

                vNames[i] = str;
            }

            Dictionary <string, PwGroup> dGroups = new Dictionary <string, PwGroup>();

            while (true)
            {
                string[] v = csv.ReadLine();
                if (v == null)
                {
                    break;
                }
                if (v.Length == 0)
                {
                    continue;
                }

                PwEntry pe = new PwEntry(true, true);
                PwGroup pg = pwStorage.RootGroup;

                for (int i = 0; i < v.Length; ++i)
                {
                    string strValue = v[i];
                    if (string.IsNullOrEmpty(strValue))
                    {
                        continue;
                    }

                    strValue = strValue.Replace(@"<COMMA>", ",");
                    strValue = strValue.Replace(@"<-N/L-/>", "\n");

                    strValue = StrUtil.NormalizeNewLines(strValue, true);

                    string strName = ((i < vNames.Length) ? vNames[i] : PwDefs.NotesField);

                    if (strName == strMapIgnore)
                    {
                    }
                    else if (strName == strMapGroup)
                    {
                        dGroups.TryGetValue(strValue, out pg);
                        if (pg == null)
                        {
                            pg      = new PwGroup(true, true);
                            pg.Name = strValue;

                            pwStorage.RootGroup.AddGroup(pg, true);
                            dGroups[strValue] = pg;
                        }
                    }
                    else if (strName == strMapTags)
                    {
                        List <string> lTags = StrUtil.StringToTags(strValue);
                        foreach (string strTag in lTags)
                        {
                            pe.AddTag(strTag);
                        }
                    }
                    else if (strName == strMapLastMod)
                    {
                        double dUnix;
                        if (double.TryParse(strValue, out dUnix))
                        {
                            pe.LastModificationTime = TimeUtil.ConvertUnixTime(dUnix);
                        }
                        else
                        {
                            Debug.Assert(false);
                        }
                    }
                    else if (strName == strMapEMail)
                    {
                        ImportUtil.AppendToField(pe, PwDefs.UrlField,
                                                 "mailto:" + strValue, pwStorage);
                    }
                    else
                    {
                        ImportUtil.AppendToField(pe, strName, strValue, pwStorage);
                    }
                }

                pg.AddEntry(pe, true);
            }
        }
Esempio n. 13
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
            IStatusLogger slLogger)
        {
            StreamReader sr = new StreamReader(sInput, Encoding.Default);
            string strData = sr.ReadToEnd();
            sr.Close();
            sInput.Close();

            Dictionary<string, PwGroup> dGroups = new Dictionary<string, PwGroup>();
            dGroups[string.Empty] = pwStorage.RootGroup;

            CsvOptions opt = new CsvOptions();
            opt.BackslashIsEscape = false;

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);

            while(true)
            {
                string[] v = csv.ReadLine();
                if(v == null) break;
                if(v.Length == 0) continue;
                if(v[0].StartsWith("TurboPasswords CSV Export File")) continue;
                if(v.Length < 24) { Debug.Assert(false); continue; }
                if((v[0] == "Category") && (v[1] == "Type")) continue;

                PwEntry pe = new PwEntry(true, true);

                PwGroup pg;
                string strGroup = v[0];
                if(!dGroups.TryGetValue(strGroup, out pg))
                {
                    pg = new PwGroup(true, true, strGroup, PwIcon.Folder);
                    dGroups[string.Empty].AddGroup(pg, true);
                    dGroups[strGroup] = pg;
                }
                pg.AddEntry(pe, true);

                string strType = v[1];

                for(int f = 0; f < 6; ++f)
                {
                    string strKey = v[2 + (2 * f)];
                    string strValue = v[2 + (2 * f) + 1];
                    if(strKey.Length == 0) strKey = PwDefs.NotesField;
                    if(strValue.Length == 0) continue;

                    if(strKey == "Description")
                        strKey = PwDefs.TitleField;
                    else if(((strType == "Contact") || (strType == "Personal Info")) &&
                        (strKey == "Name"))
                        strKey = PwDefs.TitleField;
                    else if(((strType == "Membership") || (strType == "Insurance")) &&
                        (strKey == "Company"))
                        strKey = PwDefs.TitleField;
                    else if(strKey == "SSN")
                        strKey = PwDefs.UserNameField;
                    else
                    {
                        string strMapped = ImportUtil.MapNameToStandardField(strKey, false);
                        if(!string.IsNullOrEmpty(strMapped)) strKey = strMapped;
                    }

                    ImportUtil.AppendToField(pe, strKey, strValue, pwStorage,
                        ((strKey == PwDefs.NotesField) ? "\r\n" : ", "), false);
                }

                ImportUtil.AppendToField(pe, PwDefs.NotesField, v[20], pwStorage,
                    "\r\n\r\n", false);
                if(v[21].Length > 0)
                    ImportUtil.AppendToField(pe, "Login URL", v[21], pwStorage, null, true);
            }
        }
Esempio n. 14
0
		public override void Import(PwDatabase pwStorage, Stream sInput,
			IStatusLogger slLogger)
		{
			StreamReader sr = new StreamReader(sInput, Encoding.Default);
			string strData = sr.ReadToEnd();
			sr.Close();

			CsvOptions opt = new CsvOptions();
			opt.BackslashIsEscape = false;
			opt.TextQualifier = char.MaxValue; // No text qualifier

			CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);
			PwGroup pg = pwStorage.RootGroup;
			char[] vGroupSplit = new char[] { '\\' };

			while(true)
			{
				string[] v = csv.ReadLine();
				if(v == null) break;
				if(v.Length < 1) continue;

				for(int i = 0; i < v.Length; ++i)
					v[i] = ParseString(v[i]);

				if(v[0].StartsWith("\\")) // Group
				{
					string strGroup = v[0].Trim(vGroupSplit); // Also from end
					if(strGroup.Length > 0)
					{
						pg = pwStorage.RootGroup.FindCreateSubTree(strGroup,
							vGroupSplit);

						if(v.Length >= 6) pg.Notes = v[5].Trim();
						if((v.Length >= 5) && (v[4].Trim().Length > 0))
						{
							if(pg.Notes.Length > 0)
								pg.Notes += Environment.NewLine + Environment.NewLine;

							pg.Notes += v[4].Trim();
						}
					}
				}
				else // Entry
				{
					PwEntry pe = new PwEntry(true, true);
					pg.AddEntry(pe, true);

					List<string> l = new List<string>(v);
					while(l.Count < 8)
					{
						Debug.Assert(false);
						l.Add(string.Empty);
					}

					ImportUtil.AppendToField(pe, PwDefs.TitleField, l[0], pwStorage);
					ImportUtil.AppendToField(pe, PwDefs.UserNameField, l[1], pwStorage);
					ImportUtil.AppendToField(pe, PwDefs.PasswordField, l[2], pwStorage);
					ImportUtil.AppendToField(pe, PwDefs.UrlField, l[3], pwStorage);
					ImportUtil.AppendToField(pe, PwDefs.NotesField, l[4], pwStorage);

					if(l[5].Length > 0)
						ImportUtil.AppendToField(pe, "Custom 1", l[5], pwStorage);
					if(l[6].Length > 0)
						ImportUtil.AppendToField(pe, "Custom 2", l[6], pwStorage);
					if(l[7].Length > 0)
						ImportUtil.AppendToField(pe, "Custom 3", l[7], pwStorage);
				}
			}
		}
Esempio n. 15
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr      = new StreamReader(sInput, Encoding.Default);
            string       strData = sr.ReadToEnd();

            sr.Close();

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;
            opt.TextQualifier     = char.MaxValue;         // No text qualifier

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);
            PwGroup           pg  = pwStorage.RootGroup;

            char[] vGroupSplit = new char[] { '\\' };

            while (true)
            {
                string[] v = csv.ReadLine();
                if (v == null)
                {
                    break;
                }
                if (v.Length < 1)
                {
                    continue;
                }

                for (int i = 0; i < v.Length; ++i)
                {
                    v[i] = ParseString(v[i]);
                }

                if (v[0].StartsWith("\\"))                    // Group
                {
                    string strGroup = v[0].Trim(vGroupSplit); // Also from end
                    if (strGroup.Length > 0)
                    {
                        pg = pwStorage.RootGroup.FindCreateSubTree(strGroup,
                                                                   vGroupSplit);

                        if (v.Length >= 6)
                        {
                            pg.Notes = v[5].Trim();
                        }
                        if ((v.Length >= 5) && (v[4].Trim().Length > 0))
                        {
                            if (pg.Notes.Length > 0)
                            {
                                pg.Notes += Environment.NewLine + Environment.NewLine;
                            }

                            pg.Notes += v[4].Trim();
                        }
                    }
                }
                else                 // Entry
                {
                    PwEntry pe = new PwEntry(true, true);
                    pg.AddEntry(pe, true);

                    List <string> l = new List <string>(v);
                    while (l.Count < 8)
                    {
                        Debug.Assert(false);
                        l.Add(string.Empty);
                    }

                    ImportUtil.AppendToField(pe, PwDefs.TitleField, l[0], pwStorage);
                    ImportUtil.AppendToField(pe, PwDefs.UserNameField, l[1], pwStorage);
                    ImportUtil.AppendToField(pe, PwDefs.PasswordField, l[2], pwStorage);
                    ImportUtil.AppendToField(pe, PwDefs.UrlField, l[3], pwStorage);
                    ImportUtil.AppendToField(pe, PwDefs.NotesField, l[4], pwStorage);

                    if (l[5].Length > 0)
                    {
                        ImportUtil.AppendToField(pe, "Custom 1", l[5], pwStorage);
                    }
                    if (l[6].Length > 0)
                    {
                        ImportUtil.AppendToField(pe, "Custom 2", l[6], pwStorage);
                    }
                    if (l[7].Length > 0)
                    {
                        ImportUtil.AppendToField(pe, "Custom 3", l[7], pwStorage);
                    }
                }
            }
        }
Esempio n. 16
0
        private static void ImportCsv(CsvStreamReaderEx csr, PwDatabase pd)
        {
            CsvTableEntryReader ctr = new CsvTableEntryReader(pd);

            const string strColUrl = "url";

            Predicate <string[]> fIsSecNote = delegate(string[] vRow)
            {
                string str = ctr.GetData(vRow, strColUrl, string.Empty);
                return(str.Equals("http://sn", StrUtil.CaseIgnoreCmp));
            };

            ctr.SetDataAppend("name", PwDefs.TitleField);
            ctr.SetDataAppend("username", PwDefs.UserNameField);
            ctr.SetDataAppend("password", PwDefs.PasswordField);

            ctr.SetDataHandler(strColUrl, delegate(string str, PwEntry pe,
                                                   string[] vContextRow)
            {
                if (!fIsSecNote(vContextRow))
                {
                    ImportUtil.AppendToField(pe, PwDefs.UrlField, str, pd);
                }
            });

            ctr.SetDataHandler("extra", delegate(string str, PwEntry pe,
                                                 string[] vContextRow)
            {
                if (fIsSecNote(vContextRow) && str.StartsWith("NoteType:",
                                                              StrUtil.CaseIgnoreCmp))
                {
                    AddNoteFields(pe, str, pd);
                    return;
                }

                ImportUtil.AppendToField(pe, PwDefs.NotesField, str, pd);
            });

            ctr.SetDataHandler("grouping", delegate(string str, PwEntry pe,
                                                    string[] vContextRow)
            {
                if (str.Length == 0)
                {
                    return;
                }

                PwGroup pg = pd.RootGroup.FindCreateSubTree(str,
                                                            new string[1] {
                    "\\"
                }, true);
                pg.AddEntry(pe, true);
            });

            ctr.SetDataHandler("fav", delegate(string str, PwEntry pe,
                                               string[] vContextRow)
            {
                if (StrUtil.StringToBool(str))
                {
                    pe.AddTag(PwDefs.FavoriteTag);
                }
            });

            ctr.Read(csr);
        }
Esempio n. 17
0
        public override void Import(PwDatabase pwStorage, Stream sInput,
                                    IStatusLogger slLogger)
        {
            StreamReader sr      = new StreamReader(sInput, StrUtil.Utf8, true);
            string       strData = sr.ReadToEnd();

            sr.Close();

            CsvOptions opt = new CsvOptions();

            opt.BackslashIsEscape = false;
            opt.TrimFields        = true;

            CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, opt);

            string[] vNames = csv.ReadLine();
            if ((vNames == null) || (vNames.Length == 0))
            {
                Debug.Assert(false); return;
            }

            for (int i = 0; i < vNames.Length; ++i)
            {
                vNames[i] = (vNames[i] ?? string.Empty).ToLowerInvariant();
            }

            while (true)
            {
                string[] v = csv.ReadLine();
                if (v == null)
                {
                    break;
                }
                if (v.Length == 0)
                {
                    continue;
                }

                PwEntry pe = new PwEntry(true, true);
                pwStorage.RootGroup.AddEntry(pe, true);

                Debug.Assert(v.Length == vNames.Length);
                int m = Math.Min(v.Length, vNames.Length);

                for (int i = 0; i < m; ++i)
                {
                    string strValue = v[i];
                    if (string.IsNullOrEmpty(strValue))
                    {
                        continue;
                    }

                    string   strName = vNames[i];
                    string   strTo   = null;
                    DateTime?odt;

                    switch (strName)
                    {
                    case "autologin":
                    case "protectedwithpassword":
                    case "subdomainonly":
                    case "type":
                    case "tk_export_version":
                        break;                                 // Ignore

                    case "kind":
                        if (strValue.Equals("note", StrUtil.CaseIgnoreCmp))
                        {
                            pe.IconId = PwIcon.Note;
                        }
                        else if (strValue.Equals("identity", StrUtil.CaseIgnoreCmp) ||
                                 strValue.Equals("drivers", StrUtil.CaseIgnoreCmp) ||
                                 strValue.Equals("passport", StrUtil.CaseIgnoreCmp) ||
                                 strValue.Equals("ssn", StrUtil.CaseIgnoreCmp))
                        {
                            pe.IconId = PwIcon.Identity;
                        }
                        else if (strValue.Equals("cc", StrUtil.CaseIgnoreCmp))
                        {
                            pe.IconId = PwIcon.Money;
                        }
                        else if (strValue.Equals("membership", StrUtil.CaseIgnoreCmp))
                        {
                            pe.IconId = PwIcon.UserKey;
                        }
                        break;

                    case "name":
                    case "title":
                        strTo = PwDefs.TitleField;
                        break;

                    case "cardholder":
                    case "email":
                    case "login":
                        strTo = PwDefs.UserNameField;
                        break;

                    case "password":
                        strTo = PwDefs.PasswordField;
                        break;

                    case "url":
                    case "website":
                        strTo = PwDefs.UrlField;
                        break;

                    case "document_content":
                    case "memo":
                    case "note":
                        strTo = PwDefs.NotesField;
                        break;

                    case "city":
                    case "company":
                    case "country":
                    case "number":
                    case "state":
                    case "street":
                    case "telephone":
                        strTo = (new string(char.ToUpperInvariant(strName[0]), 1)) +
                                strName.Substring(1);
                        break;

                    case "deliveryplace":
                        strTo = "Delivery Place";
                        break;

                    case "firstname":
                        strTo = "First Name";
                        break;

                    case "lastname":
                        strTo = "Last Name";
                        break;

                    case "memberid":
                        strTo = "Member ID";
                        break;

                    case "phonenumber":
                        strTo = "Phone Number";
                        break;

                    case "streetnumber":
                        strTo = "Street Number";
                        break;

                    case "zipcode":
                        strTo = "ZIP Code";
                        break;

                    case "dateofbirth":
                        strTo    = "Date of Birth";
                        strValue = DateToString(strValue);
                        break;

                    case "expirationdate":
                    case "expirydate":
                        odt = ParseTime(strValue);
                        if (odt.HasValue)
                        {
                            pe.Expires    = true;
                            pe.ExpiryTime = odt.Value;
                        }
                        break;

                    case "favorite":
                        if (StrUtil.StringToBoolEx(strValue).GetValueOrDefault(false))
                        {
                            pe.AddTag("Favorite");
                        }
                        break;

                    case "gender":
                        if ((strValue == "0") || (strValue == "1"))
                        {
                            strTo    = "Gender";
                            strValue = ((strValue == "0") ? "Male" : "Female");
                        }
                        else
                        {
                            Debug.Assert(false);
                        }
                        break;

                    case "hexcolor":
                        if ((strValue.Length == 6) && StrUtil.IsHexString(strValue, true))
                        {
                            Color c = Color.FromArgb(unchecked ((int)(0xFF000000U |
                                                                      Convert.ToUInt32(strValue, 16))));

                            Color cG = UIUtil.ColorToGrayscale(c);
                            if (cG.B < 128)
                            {
                                c = UIUtil.LightenColor(c, 0.5);
                            }

                            pe.BackgroundColor = c;
                        }
                        else
                        {
                            Debug.Assert(false);
                        }
                        break;

                    case "issuedate":
                    case "issueddate":
                        strTo    = "Issue Date";
                        strValue = DateToString(strValue);
                        break;

                    case "membersince":
                        strTo    = "Member Since";
                        strValue = DateToString(strValue);
                        break;

                    default:
                        Debug.Assert(false);                                 // Unknown field
                        break;
                    }

                    if (!string.IsNullOrEmpty(strTo))
                    {
                        ImportUtil.AppendToField(pe, strTo, strValue, pwStorage);
                    }
                }
            }
        }
Esempio n. 18
0
        private bool GuessFieldTypes()
        {
            CsvOptions opt = GetCsvOptions();

            if (opt == null)
            {
                Debug.Assert(false); return(false);
            }

            string            strData = GetDecodedText();
            CsvStreamReaderEx csv     = new CsvStreamReaderEx(strData, opt);

            string[] v;
            while (true)
            {
                v = csv.ReadLine();
                if (v == null)
                {
                    return(false);
                }
                if (v.Length == 0)
                {
                    continue;
                }
                if ((v.Length == 1) && (v[0].Length == 0))
                {
                    continue;
                }
                break;
            }
            if (v.Length <= 3)
            {
                return(false);
            }

            CsvFieldInfo[] vFields     = new CsvFieldInfo[v.Length];
            int            nDetermined = 0;

            for (int i = 0; i < v.Length; ++i)
            {
                CsvFieldInfo fi = GuessFieldType(v[i]);
                if (fi != null)
                {
                    ++nDetermined;
                }
                else
                {
                    fi = new CsvFieldInfo(CsvFieldType.Ignore, null, null);
                }

                vFields[i] = fi;
            }

            // Accept the guesses only if at least half of them are
            // probably correct
            if (nDetermined < (v.Length + 1) / 2)
            {
                return(false);
            }

            m_lvFields.Items.Clear();
            foreach (CsvFieldInfo fi in vFields)
            {
                AddCsvField(fi.Type, fi.Name, fi.Format);
            }

            return(true);
        }
Esempio n. 19
0
        private void PerformImport(PwGroup pgStorage, bool bCreatePreview)
        {
            List <CsvFieldInfo> lFields = GetCsvFieldInfos();

            if (bCreatePreview)
            {
                int dx = m_lvImportPreview.ClientRectangle.Width;                 // Before clearing

                m_lvImportPreview.Items.Clear();
                m_lvImportPreview.Columns.Clear();

                foreach (CsvFieldInfo cfi in lFields)
                {
                    string strCol = CsvFieldToString(cfi.Type);
                    if (cfi.Type == CsvFieldType.CustomString)
                    {
                        strCol = (cfi.Name ?? string.Empty);
                    }
                    m_lvImportPreview.Columns.Add(strCol, dx / lFields.Count);
                }
            }

            CsvOptions opt = GetCsvOptions();

            if (opt == null)
            {
                Debug.Assert(bCreatePreview); return;
            }

            string            strData = GetDecodedText();
            CsvStreamReaderEx csr     = new CsvStreamReaderEx(strData, opt);

            Dictionary <string, PwGroup> dGroups = new Dictionary <string, PwGroup>();

            dGroups[string.Empty] = pgStorage;

            if (bCreatePreview)
            {
                m_lvImportPreview.BeginUpdate();
            }

            DateTime dtNow           = DateTime.UtcNow;
            DateTime dtNoExpire      = KdbTime.NeverExpireTime.ToDateTime();
            bool     bIgnoreFirstRow = m_cbIgnoreFirst.Checked;
            bool     bIsFirstRow     = true;
            bool     bMergeGroups    = m_cbMergeGroups.Checked;

            while (true)
            {
                string[] v = csr.ReadLine();
                if (v == null)
                {
                    break;
                }
                if (v.Length == 0)
                {
                    continue;
                }
                if ((v.Length == 1) && (v[0].Length == 0))
                {
                    continue;
                }

                if (bIsFirstRow && bIgnoreFirstRow)
                {
                    bIsFirstRow = false;
                    continue;
                }
                bIsFirstRow = false;

                PwGroup pg = pgStorage;
                PwEntry pe = new PwEntry(true, true);

                ListViewItem lvi = null;
                for (int i = 0; i < Math.Min(v.Length, lFields.Count); ++i)
                {
                    string       strField = v[i];
                    CsvFieldInfo cfi      = lFields[i];

                    if (cfi.Type == CsvFieldType.Ignore)
                    {
                    }
                    else if (cfi.Type == CsvFieldType.Group)
                    {
                        pg = FindCreateGroup(strField, pgStorage, dGroups,
                                             cfi.Format, opt, bMergeGroups);
                    }
                    else if (cfi.Type == CsvFieldType.Title)
                    {
                        ImportUtil.AppendToField(pe, PwDefs.TitleField,
                                                 strField, m_pwDatabase);
                    }
                    else if (cfi.Type == CsvFieldType.UserName)
                    {
                        ImportUtil.AppendToField(pe, PwDefs.UserNameField,
                                                 strField, m_pwDatabase);
                    }
                    else if (cfi.Type == CsvFieldType.Password)
                    {
                        ImportUtil.AppendToField(pe, PwDefs.PasswordField,
                                                 strField, m_pwDatabase);
                    }
                    else if (cfi.Type == CsvFieldType.Url)
                    {
                        ImportUtil.AppendToField(pe, PwDefs.UrlField,
                                                 strField, m_pwDatabase);
                    }
                    else if (cfi.Type == CsvFieldType.Notes)
                    {
                        ImportUtil.AppendToField(pe, PwDefs.NotesField,
                                                 strField, m_pwDatabase);
                    }
                    else if (cfi.Type == CsvFieldType.CustomString)
                    {
                        ImportUtil.AppendToField(pe, (string.IsNullOrEmpty(cfi.Name) ?
                                                      PwDefs.NotesField : cfi.Name), strField, m_pwDatabase);
                    }
                    else if (cfi.Type == CsvFieldType.CreationTime)
                    {
                        pe.CreationTime = ParseDateTime(ref strField, cfi, dtNow);
                    }
                    // else if(cfi.Type == CsvFieldType.LastAccessTime)
                    //	pe.LastAccessTime = ParseDateTime(ref strField, cfi, dtNow);
                    else if (cfi.Type == CsvFieldType.LastModTime)
                    {
                        pe.LastModificationTime = ParseDateTime(ref strField, cfi, dtNow);
                    }
                    else if (cfi.Type == CsvFieldType.ExpiryTime)
                    {
                        bool bParseSuccess;
                        pe.ExpiryTime = ParseDateTime(ref strField, cfi, dtNow,
                                                      out bParseSuccess);
                        pe.Expires = (bParseSuccess && (pe.ExpiryTime != dtNoExpire));
                    }
                    else if (cfi.Type == CsvFieldType.Tags)
                    {
                        StrUtil.AddTags(pe.Tags, StrUtil.StringToTags(strField));
                    }
                    else
                    {
                        Debug.Assert(false);
                    }

                    if (bCreatePreview)
                    {
                        strField = StrUtil.MultiToSingleLine(strField);

                        if (lvi != null)
                        {
                            lvi.SubItems.Add(strField);
                        }
                        else
                        {
                            lvi = m_lvImportPreview.Items.Add(strField);
                        }
                    }
                }

                if (bCreatePreview)
                {
                    // Create remaining subitems
                    for (int r = v.Length; r < lFields.Count; ++r)
                    {
                        if (lvi != null)
                        {
                            lvi.SubItems.Add(string.Empty);
                        }
                        else
                        {
                            lvi = m_lvImportPreview.Items.Add(string.Empty);
                        }
                    }
                }

                pg.AddEntry(pe, true);
            }

            if (bCreatePreview)
            {
                m_lvImportPreview.EndUpdate();
                ProcessResize();
            }
        }
Esempio n. 20
0
		public override void Import(PwDatabase pwStorage, Stream sInput,
			IStatusLogger slLogger)
		{
			StreamReader sr = new StreamReader(sInput, Encoding.Default, true);
			string strData = sr.ReadToEnd();
			sr.Close();

			CsvOptions o = new CsvOptions();
			o.BackslashIsEscape = false;

			CsvStreamReaderEx csv = new CsvStreamReaderEx(strData, o);

			SortedDictionary<string, PwGroup> dictGroups =
				new SortedDictionary<string, PwGroup>();
			while(true)
			{
				string[] vLine = csv.ReadLine();
				if(vLine == null) break;
				if(vLine.Length == 0) continue;

				if(vLine.Length == 1)
				{
					Debug.Assert(vLine[0] == StrHeader);
					continue;
				}

				// Support old version 3.4
				if(vLine.Length == 9)
				{
					string[] v = new string[13];
					for(int i = 0; i < 7; ++i) v[i] = vLine[i];
					for(int i = 7; i < 11; ++i) v[i] = string.Empty;
					v[11] = vLine[7];
					v[12] = vLine[8];

					vLine = v;
				}

				if(vLine.Length == 13)
					ProcessCsvLine(vLine, pwStorage, dictGroups);
				else { Debug.Assert(false); }
			}
		}