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); }