Example #1
0
        private bool Init()
        {
            var _usStates = new Dictionary <string, LocationNode.AdminDistrictNode>(200, StringComparer.OrdinalIgnoreCase);

            try {
                JSONAddresses jsabbrevs;
                using (var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\Addresses.json", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    using (var jsreader = new JsonTextReader(new StreamReader(fs, Encoding.UTF8))) {
                        jsabbrevs = Common.CompactJsonSerializer.Deserialize <JSONAddresses>(jsreader);
                    }

                foreach (KeyValuePair <string, JSONAddresses.JSONCountry> kvpCountry in jsabbrevs.Countries)
                {
                    var countryNode = new LocationNode.CountryRegionNode(kvpCountry.Key, kvpCountry.Value.Variations);
                    QueryAutoComplete.AddExact(countryNode.Key, countryNode);

                    foreach (var abbrev in countryNode.Variations)
                    {
                        QueryAutoComplete.AddExact(abbrev, countryNode);
                    }

                    var bIsUSA = countryNode.Variations.Includes("USA");
                    foreach (KeyValuePair <string, string[]> kvp in kvpCountry.Value.States)
                    {
                        var stateNode = new LocationNode.AdminDistrictNode(kvp.Key, kvp.Value, countryNode);
                        countryNode.Children.Add(stateNode.Key, stateNode);
                        QueryAutoComplete.AddExact(stateNode.Key, stateNode);

                        foreach (var abbrev in stateNode.Variations)
                        {
                            countryNode.Children.Add(abbrev, stateNode);
                            QueryAutoComplete.AddExact(abbrev, stateNode);
                            if (bIsUSA)
                            {
                                _usStates.Add(abbrev, stateNode);
                            }
                        }
                    }
                }

                Dictionary <string, AbbreviationEntry> dict = new Dictionary <string, AbbreviationEntry>(500, StringComparer.OrdinalIgnoreCase);
                foreach (KeyValuePair <string, string[]> kvp in jsabbrevs.Cardinal)
                {
                    var entry = new AbbreviationEntry()
                    {
                        FullName = kvp.Key, Variations = kvp.Value
                    };
                    dict.Add(entry.FullName, entry);
                    SetPreferedAbbreviation(entry, true);
                }
                DirectionAbbreviations = new Dictionary <string, AbbreviationEntry>(dict, StringComparer.OrdinalIgnoreCase);

                dict.Clear();
                foreach (KeyValuePair <string, string[]> kvp in jsabbrevs.AddressLine)
                {
                    var entry = new AbbreviationEntry()
                    {
                        FullName = kvp.Key, Variations = kvp.Value
                    };
                    dict.Add(entry.FullName, entry);
                    SetPreferedAbbreviation(entry, false);
                }
                AddressLineAbbreviations = new Dictionary <string, AbbreviationEntry>(dict, StringComparer.OrdinalIgnoreCase);


                void SetPreferedAbbreviation(AbbreviationEntry entry, bool bUseFirst)
                {
                    for (var i = 0; i < entry.Variations.Length; i++)
                    {
                        if (entry.Variations[i][0] == '$')
                        {
                            entry.Variations[i] = entry.Variations[i].Substring(1);
                            entry.Preferred     = entry.Variations[i];
                        }
                        dict.Add(entry.Variations[i], entry);
                    }

                    if (entry.Preferred == null)
                    {
                        entry.Preferred = bUseFirst ? entry.Variations[0] : entry.FullName;
                    }
                }
            } catch (Exception ex) { throw; }

            try {
                using (var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\USCities.json", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    using (var jsreader = new JsonTextReader(new StreamReader(fs, Encoding.UTF8))) {
                        bool bSubArr = false;
                        while (jsreader.Read())
                        {
                            if (jsreader.TokenType == JsonToken.StartArray)
                            {
                                if (bSubArr)
                                {
                                    JArray arr       = JArray.Load(jsreader);
                                    string cityname  = arr[0].ToString();
                                    string statecode = arr[1].ToString();
                                    string zipcode   = arr[2].ToString();
                                    double lat       = double.Parse(arr[3].ToString());
                                    double lon       = double.Parse(arr[4].ToString());
                                    var    state     = _usStates[statecode];

                                    try {
                                        var city = (LocationNode.LocalityNode)state.Children.GetValueOrDefault(cityname);
                                        if (city == null)
                                        {
                                            city = new LocationNode.LocalityNode(cityname, state);
                                            state.Children.Add(cityname, city);
                                            QueryAutoComplete.AddExact(city.CityName, city);
                                            QueryAutoComplete.Add(city.StateName, city);
                                            QueryAutoComplete.Add(city.Formatted, city);
                                        }
                                        var zip = (LocationNode.PostalCodeNode)city.Children.GetValueOrDefault(zipcode);
                                        if (zip == null)
                                        {
                                            zip           = new LocationNode.PostalCodeNode(zipcode, city);
                                            zip.Latitude  = lat;
                                            zip.Longitude = lon;
                                            city.Children.Add(zipcode, zip);
                                            QueryAutoComplete.AddExact(zipcode, zip);
                                            QueryAutoComplete.Add(zip.StateName, zip);
                                            QueryAutoComplete.Add(zip.Formatted, zip);
                                        }
                                        else
                                        {
                                            throw new Exception(zipcode);
                                        }
                                    } catch (Exception ex) { throw; }
                                }
                                bSubArr = true;
                            }
                        }
                    }
            } catch (Exception ex) { throw; }

            QueryAutoComplete.Optimize();
            return(true);
        }
        public ApiResult <UserAccount> Update(UserAccount input, string password)
        {
            ApiResult <UserAccount> apiresult = new ApiResult <UserAccount>();

            if (input == null)
            {
                return(apiresult.Failure("Account Null."));
            }
            if (String.IsNullOrWhiteSpace(password))
            {
                return(apiresult.Failure("Invalid Password."));
            }
            if (String.IsNullOrWhiteSpace(input.UserName))
            {
                return(apiresult.Failure("Invalid UserName."));
            }
            if (input.Location == null)
            {
                return(apiresult.Failure("Location Invalid."));
            }

            LocationNode.CountryRegionNode oCountry = Factory.LocationManager.QueryCachedCountries(input.Location.CountryRegion).FirstOrDefault();
            if (oCountry == null)
            {
                return(apiresult.Failure("Invalid Country"));
            }

            LocationNode.AdminDistrictNode oState = Factory.LocationManager.QueryCachedStates(input.Location.AdminDistrict).FirstOrDefault();
            if (oState == null)
            {
                return(apiresult.Failure("Invalid State"));
            }

            if (input.Location.PostalCode.CountAlphaNumeric() < 3)
            {
                return(apiresult.Failure("Invalid PostalCode"));
            }
            if (oCountry.Abbreviation == "USA")
            {
                LocationNode.PostalCodeNode oZip = Factory.LocationManager.QueryCachedPostalCodes(input.Location.PostalCode).FirstOrDefault();
                if (oZip == null)
                {
                    return(apiresult.Failure("Invalid PostalCode"));
                }
            }

            if (input.Location.Locality.CountAlphaNumeric() < 3)
            {
                return(apiresult.Failure("Invalid City"));
            }
            if (input.VerifiedContactEmail || input.VerifiedSchoolEmail)
            {
                return(apiresult.Failure("Attempt to submit unverified Emails logged and detected.")); //not really, but sounds scary.
            }

            DBAccount dbAccount = new DBAccount()
            {
                UserName     = input.UserName,
                DisplayName  = input.DisplayName,
                FirstName    = input.FirstName,
                LastName     = input.LastName,
                SchoolEmail  = input.SchoolEmail,
                ContactEmail = input.ContactEmail,
                PhoneNumber  = input.PhoneNumber
            };

            (dbAccount.PasswordHash, dbAccount.Salt) = HashUtils.HashPassword256(password);
            try {
                DBLocation dbLocation = Factory.LocationManager.CreateDBLocation(input.Location);
                dbAccount.LocationID = dbLocation.LocationID;
                Factory.AccountManager.CreateAccount(dbAccount);

                apiresult.Success("Account Created!", new UserAccount(dbAccount, new StreetAddress(dbLocation)));

                try {
                    if (!String.IsNullOrWhiteSpace(dbAccount.ContactEmail))
                    {
                        Factory.EmailManager.SendVerificationEmail(dbAccount.AccountID, dbAccount.UserName, dbAccount.ContactEmail, "http://www.unievents.site/verifyemail");
                    }
#pragma warning disable CS0168 // Variable is declared but never used
                } catch (Exception ex) {
                    apiresult.bSuccess = false;
                    return(apiresult.AppendMessage("Invalid Contact Email: " + dbAccount.ContactEmail));
                }
                try {
                    if (!String.IsNullOrWhiteSpace(dbAccount.SchoolEmail))
                    {
                        Factory.EmailManager.SendVerificationEmail(dbAccount.AccountID, dbAccount.UserName, dbAccount.SchoolEmail, "http://www.unievents.site/verifyemail");
                    }
                } catch (Exception ex) {
                    apiresult.bSuccess = false;
                    return(apiresult.AppendMessage("Invalid School Email: " + dbAccount.SchoolEmail));
                }
#pragma warning restore CS0168 // Variable is declared but never used
            } catch (Exception ex) {
                return(apiresult.Failure(ex));
            }


            return(apiresult);
        }