示例#1
0
        internal static List<Tuple<string, string>> GetGoogleContacts()
        {
            var list = new List<Tuple<string, string>>();
            try
            {
                using (var oData = new SQLiteDataObject(PNData.ConnectionString))
                {
                    var update = false;
                    using (var t = oData.FillDataTable("SELECT * FROM SERVICES WHERE APP_NAME = 'PNContactsLoader'"))
                    {
                        if (t.Rows.Count == 0) return list;
                        var row = t.Rows[0];
                        using (var enc = new PNEncryptor(PNKeys.ENC_KEY))
                        {
                            var gc = new GContacts(Convert.ToString(row["CLIENT_ID"]),
                                enc.DecryptString(Convert.ToString(row["CLIENT_SECRET"])),
                                Convert.ToString(row["APP_NAME"]));
                            if (!PNData.IsDBNull(row["ACCESS_TOKEN"]))
                                gc.AccessToken = enc.DecryptString(Convert.ToString(row["ACCESS_TOKEN"]));
                            if (!PNData.IsDBNull(row["REFRESH_TOKEN"]))
                                gc.RefreshToken = enc.DecryptString(Convert.ToString(row["REFRESH_TOKEN"]));
                            if (!PNData.IsDBNull(row["TOKEN_EXPIRY"]))
                            {
                                var expDate = Convert.ToDateTime(Convert.ToString(row["TOKEN_EXPIRY"]));
                                if (expDate <= DateTime.Now && !string.IsNullOrWhiteSpace(gc.RefreshToken) &&
                                    !string.IsNullOrWhiteSpace(gc.AccessToken))
                                {
                                    if (!string.IsNullOrWhiteSpace(gc.RefreshToken))
                                        update = gc.RefreshAccessToken();
                                    if (!update)
                                        update = gc.Authenticate();
                                    if (!update)
                                        return list;
                                }
                            }
                            if (string.IsNullOrWhiteSpace(gc.AccessToken))
                                update = gc.Authenticate();

                            while (true)
                            {
                                try
                                {
                                    list = gc.GetContacts();
                                    if (update)
                                    {
                                        var sb = new StringBuilder("UPDATE SERVICES SET ACCESS_TOKEN = '");
                                        sb.Append(enc.EncryptString(gc.AccessToken));
                                        sb.Append("', REFRESH_TOKEN = '");
                                        sb.Append(enc.EncryptString(gc.RefreshToken));
                                        sb.Append("', TOKEN_EXPIRY = '");
                                        sb.Append(gc.TokenExpiry.ToString("dd MMM yyyy HH:mm:ss"));
                                        sb.Append("' WHERE APP_NAME = 'PNContactsLoader'");
                                        oData.Execute(sb.ToString());
                                    }
                                    break;
                                }
                                catch (PNContactsException pnex)
                                {
                                    if (pnex.AdditionalInfo.ToUpper().Contains("UNAUTHORIZED"))
                                    {
                                        if (!string.IsNullOrWhiteSpace(gc.RefreshToken))
                                            update = gc.RefreshAccessToken();
                                        if (update) continue;
                                        update = gc.Authenticate();
                                        if (update) continue;
                                        PNStatic.LogException(pnex);
                                        break;
                                    }
                                    PNStatic.LogException(pnex);
                                    break;
                                }
                                catch (Exception ex)
                                {
                                    PNStatic.LogException(ex);
                                    break;
                                }
                            }
                        }
                    }
                }
                return list;
            }
            catch (Exception ex)
            {
                PNStatic.LogException(ex);
                return list;
            }
        }
示例#2
0
        internal static List <Tuple <string, string> > GetGoogleContacts()
        {
            var list = new List <Tuple <string, string> >();

            try
            {
                using (var oData = new SQLiteDataObject(PNData.ConnectionString))
                {
                    var update = false;
                    using (var t = oData.FillDataTable("SELECT * FROM SERVICES WHERE APP_NAME = 'PNContactsLoader'"))
                    {
                        if (t.Rows.Count == 0)
                        {
                            return(list);
                        }
                        var row = t.Rows[0];
                        using (var enc = new PNEncryptor(PNKeys.ENC_KEY))
                        {
                            var gc = new GContacts(Convert.ToString(row["CLIENT_ID"]),
                                                   enc.DecryptString(Convert.ToString(row["CLIENT_SECRET"])),
                                                   Convert.ToString(row["APP_NAME"]));
                            if (!PNData.IsDBNull(row["ACCESS_TOKEN"]))
                            {
                                gc.AccessToken = enc.DecryptString(Convert.ToString(row["ACCESS_TOKEN"]));
                            }
                            if (!PNData.IsDBNull(row["REFRESH_TOKEN"]))
                            {
                                gc.RefreshToken = enc.DecryptString(Convert.ToString(row["REFRESH_TOKEN"]));
                            }
                            if (!PNData.IsDBNull(row["TOKEN_EXPIRY"]))
                            {
                                var expDate = Convert.ToDateTime(Convert.ToString(row["TOKEN_EXPIRY"]));
                                if (expDate <= DateTime.Now && !string.IsNullOrWhiteSpace(gc.RefreshToken) &&
                                    !string.IsNullOrWhiteSpace(gc.AccessToken))
                                {
                                    if (!string.IsNullOrWhiteSpace(gc.RefreshToken))
                                    {
                                        update = gc.RefreshAccessToken();
                                    }
                                    if (!update)
                                    {
                                        update = gc.Authenticate();
                                    }
                                    if (!update)
                                    {
                                        return(list);
                                    }
                                }
                            }
                            if (string.IsNullOrWhiteSpace(gc.AccessToken))
                            {
                                update = gc.Authenticate();
                            }

                            while (true)
                            {
                                try
                                {
                                    list = gc.GetContacts();
                                    if (update)
                                    {
                                        var sb = new StringBuilder("UPDATE SERVICES SET ACCESS_TOKEN = '");
                                        sb.Append(enc.EncryptString(gc.AccessToken));
                                        sb.Append("', REFRESH_TOKEN = '");
                                        sb.Append(enc.EncryptString(gc.RefreshToken));
                                        sb.Append("', TOKEN_EXPIRY = '");
                                        sb.Append(gc.TokenExpiry.ToString("dd MMM yyyy HH:mm:ss"));
                                        sb.Append("' WHERE APP_NAME = 'PNContactsLoader'");
                                        oData.Execute(sb.ToString());
                                    }
                                    break;
                                }
                                catch (PNContactsException pnex)
                                {
                                    if (pnex.AdditionalInfo.ToUpper().Contains("UNAUTHORIZED"))
                                    {
                                        if (!string.IsNullOrWhiteSpace(gc.RefreshToken))
                                        {
                                            update = gc.RefreshAccessToken();
                                        }
                                        if (update)
                                        {
                                            continue;
                                        }
                                        update = gc.Authenticate();
                                        if (update)
                                        {
                                            continue;
                                        }
                                        PNStatic.LogException(pnex);
                                        break;
                                    }
                                    PNStatic.LogException(pnex);
                                    break;
                                }
                                catch (Exception ex)
                                {
                                    PNStatic.LogException(ex);
                                    break;
                                }
                            }
                        }
                    }
                }
                return(list);
            }
            catch (Exception ex)
            {
                PNStatic.LogException(ex);
                return(list);
            }
        }