public static EncryptedTextContent EncryptTextContent(TextContent unencryptedContent, string password) { EncryptedTextContent contentToReturn = new EncryptedTextContent(); contentToReturn.index = unencryptedContent.index; contentToReturn.encryptedText = StringCipher.Encrypt(unencryptedContent.text, password); contentToReturn.time = StringCipher.Encrypt(unencryptedContent.time, password); return(contentToReturn); }
public static TextContent DecryptTextContent(EncryptedTextContent encryptedContent, string password) { TextContent contentToReturn = new TextContent(); contentToReturn.index = encryptedContent.index; contentToReturn.text = StringCipher.Decrypt(encryptedContent.encryptedText, password); contentToReturn.time = StringCipher.Decrypt(encryptedContent.time, password); return(contentToReturn); }
/// <summary> /// Adds record to database entriesTable. /// Note - content column should be encrypted /// </summary> /// <param name="index">Index of content.</param> /// <param name="content">Content to be written to the database, /// if security is a concern content should be encrypted.</param> /// <param name="time">Time of entry in clipboarder.</param> public void SetTextContent(EncryptedTextContent contentToAdd) { string command = String.Format( "INSERT INTO {0}('indexNumber', 'content', 'time', 'byUser') VALUES({1},\'{2}\',\'{3}\',\'{4}\');", DatabaseOperations.textEntriesTable, contentToAdd.index, contentToAdd.encryptedText, contentToAdd.time, user.id); dbOperations.ExecuteNonQueryCommand(command); }
/// <summary> /// Pulls entries for current user from database and returns list /// of string array with encrypted content. /// </summary> /// <returns>List of string[3] where string[0], [1] & [2] corresponds to Index, content and Time respectively</returns> public List <EncryptedTextContent> GetTextData() { string query = String.Format("SELECT * FROM {0} where byUser='******';", DatabaseOperations.textEntriesTable, user.id); SQLiteDataReader databaseDataReader = dbOperations.GetDataReader(query); List <EncryptedTextContent> outputList = new List <EncryptedTextContent>(); while (databaseDataReader.Read()) { EncryptedTextContent contentToAdd = new EncryptedTextContent(); //ignored value at [0] since id of record is of no use in this context. contentToAdd.index = databaseDataReader.GetInt32(1); //Index of record acording to clipboarder entry contentToAdd.encryptedText = databaseDataReader.GetString(2); //content contentToAdd.time = databaseDataReader.GetString(3); //time of entry in clipboarder outputList.Add(contentToAdd); } return(outputList); }
/// <summary> /// Exports all clipboarder entries to database /// </summary> public void ExportEntries() { List <TextContent> textContents = view.GetAllTextContent(); List <ImageContent> imageContents = view.GetAllImageContent(); if (textContents.Count == 0 && imageContents.Count == 0) { MessageBox.Show("No entries to save.", "Clipboarder", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { AskPasswordEncrypt askPassword = new AskPasswordEncrypt(this); DialogResult result = askPassword.ShowDialog(); // Uses DatabaseOperations class object to connect and write to database Clipboarder.Extension DatabaseOperations dbOperations = new DatabaseOperations(); if (result == DialogResult.OK) { if (!File.Exists(System.IO.Path.Combine(Application.StartupPath, databaseName))) { //Creates new Database DatabaseOperations.CreatesNewDatabase(databaseName); Properties.Settings.Default.doesDatabaseExists = true; } // Connects to database and opens connection try { dbOperations = new DatabaseOperations(); dbOperations.ConnectDatabase(databaseName); dbOperations.OpenConnection(); } catch (Exception ex) { MessageBox.Show("Error connecting database. \n\nOperation aborted.\n" + ex.ToString(), "Clipboarder Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); dbOperations.CloseConnection(); return; } User user = new User(dbOperations); if (user.CurrentUserHasID()) { user.GetCurrentUserID(); } DatabaseReadWrite dbContents = new DatabaseReadWrite(dbOperations, user); // Deletes existing content for current user if corresponding record exists in userTable if (user.CurrentUserHasID()) { try { //dbContents.clearAllContent(); dbContents.DeleteAllRecordsForCurrentUsers(); user.DeleteEntry(); user.CreateEntry(BCrypt.HashPassword(password, BCrypt.GenerateSalt(10))); user.GetCurrentUserID(); } catch (Exception ex) { DialogResult messageResult = MessageBox.Show("Error deleting existing records from database.\n" + "\n\nDo you want to continue?.", "Clipboarder Error", MessageBoxButtons.YesNo, MessageBoxIcon.Stop); dbOperations.CloseConnection(); if (messageResult == DialogResult.No) { return; } } } else { // Hashes password using BCrypt Class and adds new record to userName table in database try { user.CreateEntry(BCrypt.HashPassword(password, BCrypt.GenerateSalt(10))); user.GetCurrentUserID(); } catch (Exception ex) { MessageBox.Show("Error adding current user record to database." + ex.ToString() + "\n\nOperation aborted.\n", "Clipboarder Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); dbOperations.CloseConnection(); return; } } // Resets progress status in view view.ProgressVisibility = true; view.TaskProgress = 0; //------------------------------------------------------------- // Exports text Entries textContents.ForEach(content => { // Sets task progress view.TaskProgress = (100 / textContents.Count) * (content.index); EncryptedTextContent encryptedContent = ContentEncryption.EncryptTextContent(content, password); // Inserts content to database try { dbContents.SetTextContent(encryptedContent); } catch (Exception ex) { MessageBox.Show("Error adding content to database. \n\nOperation aborted.\n" + ex.ToString(), "Clipboarder Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); dbOperations.CloseConnection(); return; } }); view.TaskProgress = 0; //------------------------------------------------------------- // Exports image Entries imageContents.ForEach(content => { // Sets task progress view.TaskProgress = (100 / imageContents.Count) * (content.index); EncryptedImageContent encryptedContent = ContentEncryption.EncryptImageContent(content, password); // Inserts content to database try { dbContents.SetImageContent(encryptedContent); } catch (Exception ex) { MessageBox.Show("Error adding content to database. \n\nOperation aborted.\n" + ex.ToString(), "Clipboarder Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); dbOperations.CloseConnection(); return; } }); view.TaskProgress = 0; view.ProgressVisibility = false; view.status = "Export Completed"; dbOperations.CloseConnection(); } password = null; } }