public async Task <IEnumerable <LoginEntry> > GetLoginEntriesAsync(string username) { await Context.LogDebugAsync($"Attempting login for {username}"); return(await DatabaseInstance.GetInstance().RunInTransactionAsync(db => db // Find the users .Select <Database.User>(x => !x.Disabled && string.Equals(x.Email, username, StringComparison.OrdinalIgnoreCase) ) // Convert to authentication format .Select(x => new LoginEntry() { UserID = x.ID, Username = x.Name, Token = x.Password }) // Force in-memory serialization .ToArray() // Return as enumerable (backed by array) .AsEnumerable() )); }
private void UpdateParametersOID() { AlgParSetOIDComboBox.DataSource = DatabaseInstance.GetInstance().AlgParSets .Where(elm => elm.Len_AlgParSet.Value_Len == GetParametersLen()) .Select(elm => elm.OID_AlgParSet) .ToList(); }
private void UpdateUserRegion() { SubjRegionComboBox.DataSource = DatabaseInstance.GetInstance().Regions .Include(elm => elm.Country_Region) .Where(elm => elm.Country_Region.Name_Country == GetUserCountry()) .Select(elm => elm.Name_Region) .ToList(); }
private void UpdateUserCity() { SubjCityComboBox.DataSource = DatabaseInstance.GetInstance().Cities .Include(elm => elm.Region_City) .Where(elm => elm.Region_City.Name_Region == GetUserRegion()) .Select(elm => elm.Name_City) .ToList(); }
/// <summary> /// Activates a user /// </summary> /// <param name="id">The signup request ID</param> /// <returns>An awaitable task</returns> internal static async Task ActivateUser(string id) { // Create the activation request var req = await DatabaseInstance.GetInstance().RunInTransactionAsync(db => { var sr = db.SelectItemById <Database.Signup.SignupEntry>(id); if (sr == null) { throw new ArgumentException($"No such signup request: {id}"); } var ar = db.SelectSingle <Database.ActivationRequest>(x => x.SignupID == id); if (ar != null) { if (DateTime.Now - ar.LastSent < TimeSpan.FromMinutes(15)) { Ceen.Context.LogInformationAsync($"Not sending new activation email to {id} as the previous one was sent {ar.LastSent}"); return(null); } else { ar.LastSent = DateTime.Now; db.UpdateItem(ar); } } else { ar = db.InsertItem(new Database.ActivationRequest() { SignupID = id, Token = Services.PasswordPolicy.GenerateActivationCode(), LastSent = DateTime.Now }); } return(new { Name = sr.Name, Email = sr.Email, ID = ar.ID, Locale = sr.Locale }); }); if (req == null) { return; } await Queues.SendActivationEmailAsync(req.Name, req.Email, req.ID, req.Locale); }
/// <summary> /// Gets the number of signup emails sent by the current requester within the given period /// </summary> /// <returns>The count</returns> private static async Task <long> GetSignupEmailsSentByIPAsync() { if (DatabaseInstance.Current == null) { return(await DatabaseInstance.GetInstance().RunInTransactionAsync(db => GetSignupEmailsSentByIPAsync())); } var requestIP = ExtensionUtility.RemoteIP; return(DatabaseInstance.Current.SelectCount <Database.SentEmailLog>( x => (x.When > DateTime.Now - LOOKBACK_PERIOD) && (x.Type == Database.EmailType.SignupConfirmation) && (x.Delivered == true) && (x.RequestIP == requestIP) )); }
private static bool UpdateByValidTime(Cert certificate) { var time = DateTime.Now; if (certificate.ValidBy_Cert < time) { DatabaseInstance.GetInstance().Certs.Remove(certificate); DatabaseInstance.GetInstance().CancelledCerts.Add(new CancelledCert(certificate)); foreach (var cert in DatabaseInstance.GetInstance().Certs.Where(elm => elm.SignSerialNumber_Cert == certificate.SerialNumber_Cert).AsEnumerable()) { DatabaseInstance.GetInstance().Certs.Remove(cert); DatabaseInstance.GetInstance().CancelledCerts.Add(new CancelledCert(cert)); } DatabaseInstance.GetInstance().SaveChanges(); return(true); } return(false); }
public static byte[] GetSignedCertificate(AlgParSet parameters, Subj subj) { X509Certificate root = new X509CertificateParser().ReadCertificate(GetRootCertificate()); Cert data = CreateDatabaseInfoFromCertificate(root); var keys = GenerateKeyPair(parameters); string serial = string.Empty; do { serial = BigIntegers.CreateRandomBigInteger(512, new SecureRandom()).ToString(); }while (DatabaseInstance.GetInstance().Certs.FirstOrDefault(elm => elm.SerialNumber_Cert == serial) != null); Cert certificate = new Cert { Ver_Cert = DatabaseInstance.GetInstance().Vers.FirstOrDefault(), SignAlg_Cert = new SignAlg { AlgParSet_SignAlg = parameters, PrivateKey_SignAlg = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keys.Private).ToAsn1Object().GetEncoded(), PublicKey_SignAlg = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keys.Public).ToAsn1Object().GetEncoded() }, Issuer_Cert = data.Issuer_Cert, Subj_Cert = subj, SerialNumber_Cert = serial, ValidFrom_Cert = DateTime.Now, ValidBy_Cert = DateTimeOffset.Now.AddYears(5).UtcDateTime, SignSerialNumber_Cert = data.SerialNumber_Cert }; var cert = CreateCertificateFromDatabaseInfo(certificate); certificate.SignValue_Cert = string.Join("", BitConverter.ToString(cert.GetSignature()).Split('-')); DatabaseInstance.GetInstance().Certs.Add(certificate); DatabaseInstance.GetInstance().SaveChanges(); return(cert.GetEncoded()); }
private void CountryViewForm_Load(object sender, EventArgs e) { DatabaseInstance.GetInstance().Countries.Load(); CountriesDataGrid.DataSource = DatabaseInstance.GetInstance().Countries.Local.ToBindingList(); }
private void SaveButton_Click(object sender, EventArgs e) { DatabaseInstance.GetInstance().SaveChanges(); CountriesDataGrid.Refresh(); }
private void CreateButton_Click(object sender, EventArgs e) { bool hasError = false; DebugRichTextBox.Text = ""; m_Subject.Surname_Subj = GetUserSurname(); if (m_Subject.Surname_Subj.Length == 0) { hasError = true; DebugRichTextBox.Text += "Error occured in user name!" + Environment.NewLine; } m_Subject.Name_Subj = GetUserName(); if (m_Subject.Name_Subj.Length == 0) { hasError = true; DebugRichTextBox.Text += "Error occured in user name!" + Environment.NewLine; } m_Subject.BirthDate_Subj = GetUserBirthDate(); m_Subject.Phone_Subj = GetUserPhone(); if (m_Subject.Phone_Subj.Length == 0 || m_Subject.Phone_Subj.Count(elm => elm < '0' || elm > '9') > 0) { hasError = true; DebugRichTextBox.Text += "Error occured in user phone!" + Environment.NewLine; } m_Subject.EMail_Subj = GetUserEMail(); if (m_Subject.EMail_Subj.Length == 0 || m_Subject.EMail_Subj.Count(elm => elm == '@') == 0 || m_Subject.EMail_Subj.Count(elm => elm == '@') > 1 || m_Subject.EMail_Subj.Count(elm => elm == '.') == 0 || m_Subject.EMail_Subj.Count(elm => elm == '.') > 1 || m_Subject.EMail_Subj.IndexOf('.') - m_Subject.EMail_Subj.IndexOf('@') < 2 || m_Subject.EMail_Subj.IndexOf('.') == m_Subject.EMail_Subj.Length - 1) { hasError = true; DebugRichTextBox.Text += "Error occured in user email!" + Environment.NewLine; } m_Subject.Gender_Subj = DatabaseInstance.GetInstance().Genders.FirstOrDefault(elm => elm.Name_Gender == GetUserGender()); if (m_Subject.Gender_Subj == null) { hasError = true; DebugRichTextBox.Text += "Error occured in user gender!" + Environment.NewLine; } m_Subject.Citizen_Subj = DatabaseInstance.GetInstance().Citizens.FirstOrDefault(elm => elm.Name_Citizen == GetUserCitizenship()); if (m_Subject.Citizen_Subj == null) { hasError = true; DebugRichTextBox.Text += "Error occured in user citizenship!" + Environment.NewLine; } m_Subject.City_Subj = DatabaseInstance.GetInstance().Cities.FirstOrDefault(elm => elm.Name_City == GetUserCity()); if (m_Subject.City_Subj == null) { hasError = true; DebugRichTextBox.Text += "Error occured in user city!" + Environment.NewLine; } m_Subject.PassportSerias_Subj = GetUserPassportSerials(); if (m_Subject.PassportSerias_Subj.Length != 4 || m_Subject.PassportSerias_Subj.Count(elm => elm < '0' || elm > '9') > 0) { hasError = true; DebugRichTextBox.Text += "Error occured in user passport serias!" + Environment.NewLine; } m_Subject.PassportNumber_Subj = GetUserPassportNumber(); if (m_Subject.PassportNumber_Subj.Length != 6 || m_Subject.PassportNumber_Subj.Count(elm => elm < '0' || elm > '9') > 0) { hasError = true; DebugRichTextBox.Text += "Error occured in user passport number!" + Environment.NewLine; } m_Subject.INN_Subj = GetUserINN(); if (m_Subject.INN_Subj.Length != 12 || m_Subject.INN_Subj.Count(elm => elm < '0' || elm > '9') > 0) { hasError = true; DebugRichTextBox.Text += "Error occured in user INN!" + Environment.NewLine; } m_Subject.SNILS_Subj = GetUserSNILS(); if (m_Subject.SNILS_Subj.Length != 11 || m_Subject.SNILS_Subj.Count(elm => elm < '0' || elm > '9') > 0) { hasError = true; DebugRichTextBox.Text += "Error occured in user SNILS!" + Environment.NewLine; } m_AlgParSet = DatabaseInstance.GetInstance().AlgParSets .Include(elm => elm.AlgName_AlgParSet) .Include(elm => elm.HashType_AlgParSet) .Include(elm => elm.Len_AlgParSet) .FirstOrDefault(elm => elm.OID_AlgParSet == GetParametersOID()); if (m_AlgParSet == null) { hasError = true; DebugRichTextBox.Text += "Error occured in parameters OID!" + Environment.NewLine; } if (!hasError) { var certificate = X509CertificateController.GetSignedCertificate(m_AlgParSet, m_Subject); SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "X509 Certificate|*.crt"; saveFileDialog.FilterIndex = 1; saveFileDialog.Title = "Save a Certificate File"; saveFileDialog.RestoreDirectory = true; if (saveFileDialog.ShowDialog() == DialogResult.OK) { Stream dataStream; if ((dataStream = saveFileDialog.OpenFile()) != null) { dataStream.Write(certificate, 0, certificate.Length); dataStream.Close(); } X509CertificateParser parser = new X509CertificateParser(); DebugRichTextBox.Text = parser.ReadCertificate(certificate).ToString(); } } }
private void HashTypeViewForm_Load(object sender, EventArgs e) { DatabaseInstance.GetInstance().HashTypes.Load(); HashTypeGridView.DataSource = DatabaseInstance.GetInstance().HashTypes.Local.ToBindingList(); }
private void RegionViewForm_Load(object sender, EventArgs e) { DatabaseInstance.GetInstance().Regions.Load(); RegionsDataGrid.DataSource = DatabaseInstance.GetInstance().Regions.Local.ToBindingList(); }
private void CancelledCertViewForm_Load(object sender, EventArgs e) { DatabaseInstance.GetInstance().CancelledCerts.Load(); CancelldCertGridView.DataSource = DatabaseInstance.GetInstance().CancelledCerts.Local.ToBindingList(); }
private void UpdateParametersSignatureAlgorithm() { AlgParSetSignatureComboBox.DataSource = DatabaseInstance.GetInstance().AlgNames .Select(elm => elm.Name_AlgName) .ToList(); }
private void UpdateParametersHashName() { AlgParSetHashComboBox.DataSource = DatabaseInstance.GetInstance().HashTypes .Select(elm => elm.Name_HashType) .ToList(); }
private void UpdateParametersKeyLength() { AlgParSetLenComboBox.DataSource = DatabaseInstance.GetInstance().Lens .Select(elm => elm.Value_Len.ToString()) .ToList(); }
private void CityViewForm_Load(object sender, EventArgs e) { DatabaseInstance.GetInstance().Cities.Load(); CityGridView.DataSource = DatabaseInstance.GetInstance().Cities.Local.ToBindingList(); }
/// <summary> /// Sends an activation request /// </summary> /// <param name="name">The recipient name</param> /// <param name="email">The recipient email</param> /// <param name="activationcode">The activation code</param> /// <param name="language">The language the message is sent in</param> /// <param name="requestIP">The IP requesting the signup email</param> /// <returns>An awaitable task</returns> public static async Task SendAsync(string name, string email, string activationcode, string language, string requestIP) { if (DatabaseInstance.Current != null) { throw new InvalidOperationException("Cannot send email from within a transaction scope"); } var logEntry = new Database.SentEmailLog() { From = EmailSignupSettings.FromEmail, To = email, When = DateTime.Now, Type = Database.EmailType.ActivationEmail, Delivered = false, RequestIP = requestIP }; var markdown = string.Empty; var subject = string.Empty; // Insert the email log record await DatabaseInstance.GetInstance().RunInTransactionAsync(db => { // Grab the subject and body at the same time markdown = Services.TextHelper.GetTextFromDb(db, TextConstants.ChangeEmailRequestBody, language); subject = Services.TextHelper.GetTextFromDb(db, TextConstants.ChangeEmailRequestSubject, language); if (string.IsNullOrWhiteSpace(markdown)) { throw new DataException("Database is missing a template for the email body"); } if (string.IsNullOrWhiteSpace(subject)) { throw new DataException("Database is missing a template for the email subject"); } markdown = BasicTemplating.ReplaceInTemplate(markdown, new { activationcode, username = name }); subject = BasicTemplating.ReplaceInTemplate(subject, new { activationcode, username = name }); logEntry.Subject = subject; db.InsertItem(logEntry); }); var text = MarkdownRenderer.RenderAsText(markdown); markdown = MarkdownRenderer.RenderAsHtml(markdown); // Deliver the email to the server await SparkPost.SendEmailAsync(SparkPost.Transmission.Create( EmailSignupSettings.FromName, EmailSignupSettings.FromEmail, name, email, subject, markdown, text, true )); // Record that we succeeded delivering the email to the server logEntry.Delivered = true; await DatabaseInstance.GetInstance().RunInTransactionAsync(db => db.UpdateItem(logEntry)); }
private void SaveButton_Click(object sender, EventArgs e) { DatabaseInstance.GetInstance().SaveChanges(); AlgParSetGridView.Refresh(); }
private void SubjectViewForm_Load(object sender, EventArgs e) { DatabaseInstance.GetInstance().Subjs.Load(); SubjectsGridView.DataSource = DatabaseInstance.GetInstance().Subjs.Local.ToBindingList(); }
/// <summary> /// Checks if the user is an admin /// </summary> /// <param name="userid">The ID of the user to check</param> /// <returns>A flag indicating if the user is admin</returns> public static Task <bool> IsAdminAsync(string userid) { return(DatabaseInstance.GetInstance().RunInTransactionAsync(db => db.IsAdmin(userid))); }
private static Issuer GetCurrentCertificationAuthority() { return(DatabaseInstance.GetInstance().Issuers .Include(elm => elm.City_Issuer).ThenInclude(elm => elm.Region_City).ThenInclude(elm => elm.Country_Region) .FirstOrDefault()); }
private void UpdateUserGender() { SubjGenderComboBox.DataSource = DatabaseInstance.GetInstance().Genders .Select(elm => elm.Name_Gender) .ToList(); }
public static byte[] GetRootCertificate() { Issuer certificationAuthority = GetCurrentCertificationAuthority(); if (certificationAuthority == null) { throw new Exception("Cannot find certification authority!"); } var certificate = DatabaseInstance.GetInstance().Certs .Include(elm => elm.Ver_Cert) .Include(elm => elm.SignAlg_Cert).ThenInclude(elm => elm.AlgParSet_SignAlg).ThenInclude(elm => elm.AlgName_AlgParSet) .Include(elm => elm.SignAlg_Cert).ThenInclude(elm => elm.AlgParSet_SignAlg).ThenInclude(elm => elm.HashType_AlgParSet) .Include(elm => elm.SignAlg_Cert).ThenInclude(elm => elm.AlgParSet_SignAlg).ThenInclude(elm => elm.Len_AlgParSet) .Include(elm => elm.Subj_Cert).ThenInclude(elm => elm.Gender_Subj) .Include(elm => elm.Subj_Cert).ThenInclude(elm => elm.Citizen_Subj) .Include(elm => elm.Subj_Cert).ThenInclude(elm => elm.City_Subj).ThenInclude(elm => elm.Region_City).ThenInclude(elm => elm.Country_Region) .Include(elm => elm.Issuer_Cert).ThenInclude(elm => elm.City_Issuer).ThenInclude(elm => elm.Region_City).ThenInclude(elm => elm.Country_Region) .FirstOrDefault(elm => elm.SerialNumber_Cert == elm.SignSerialNumber_Cert); if (certificate == null || !IsValid(CreateCertificateFromDatabaseInfo(certificate).GetEncoded())) { var par = DatabaseInstance.GetInstance().AlgParSets .Include(elm => elm.Len_AlgParSet) .Include(elm => elm.AlgName_AlgParSet) .Include(elm => elm.HashType_AlgParSet) .FirstOrDefault(elm => elm.Len_AlgParSet.Value_Len == 256); var keys = GenerateKeyPair(par); string serial = string.Empty; do { serial = BigIntegers.CreateRandomBigInteger(512, new SecureRandom()).ToString(); }while (DatabaseInstance.GetInstance().Certs.FirstOrDefault(elm => elm.SerialNumber_Cert == serial) != null); certificate = new Cert { Ver_Cert = DatabaseInstance.GetInstance().Vers.FirstOrDefault(), SignAlg_Cert = new SignAlg { AlgParSet_SignAlg = par, PrivateKey_SignAlg = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keys.Private).ToAsn1Object().GetEncoded(), PublicKey_SignAlg = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keys.Public).ToAsn1Object().GetEncoded() }, Issuer_Cert = certificationAuthority, Subj_Cert = new Subj { Surname_Subj = "", Name_Subj = certificationAuthority.Name_Issuer, BirthDate_Subj = DateTime.Now, Gender_Subj = DatabaseInstance.GetInstance().Genders.FirstOrDefault(), Citizen_Subj = DatabaseInstance.GetInstance().Citizens.FirstOrDefault(), City_Subj = certificationAuthority.City_Issuer, Phone_Subj = certificationAuthority.Phone_Issuer, EMail_Subj = certificationAuthority.EMail_Issuer, PassportSerias_Subj = "", PassportNumber_Subj = "", INN_Subj = certificationAuthority.INN_Issuer, SNILS_Subj = "" }, SerialNumber_Cert = serial, ValidFrom_Cert = DateTime.Now, ValidBy_Cert = DateTimeOffset.Now.AddYears(5).UtcDateTime, SignSerialNumber_Cert = serial }; var cert = CreateCertificateFromDatabaseInfo(certificate); certificate.SignValue_Cert = string.Join("", BitConverter.ToString(cert.GetSignature()).Split('-')); DatabaseInstance.GetInstance().Certs.Add(certificate); DatabaseInstance.GetInstance().SaveChanges(); return(cert.GetEncoded()); } return(CreateCertificateFromDatabaseInfo(certificate).GetEncoded()); }
private void UpdateUserCitizenship() { SubjCitizenshipComboBox.DataSource = DatabaseInstance.GetInstance().Citizens .Select(elm => elm.Name_Citizen) .ToList(); }
private void AlgParSetViewForm_Load(object sender, EventArgs e) { DatabaseInstance.GetInstance().AlgParSets.Load(); AlgParSetGridView.DataSource = DatabaseInstance.GetInstance().AlgParSets.Local.ToBindingList(); }
private void UpdateUserCountry() { SubjCountryComboBox.DataSource = DatabaseInstance.GetInstance().Countries .Select(elm => elm.Name_Country) .ToList(); }