Beispiel #1
0
        /// <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 SetImageContent(EncryptedImageContent contentToAdd)
        {
            string command = String.Format(
                "INSERT INTO {0}('indexNumber', 'content', 'time', 'byUser') VALUES({1},\'{2}\',\'{3}\',\'{4}\');",
                DatabaseOperations.imageEntriesTable,
                contentToAdd.index, contentToAdd.encryptedImage, contentToAdd.time,
                user.id);

            dbOperations.ExecuteNonQueryCommand(command);
        }
Beispiel #2
0
        public static EncryptedImageContent EncryptImageContent(ImageContent unencryptedContent, string password)
        {
            EncryptedImageContent contentToReturn = new EncryptedImageContent();

            contentToReturn.index          = unencryptedContent.index;
            contentToReturn.encryptedImage =
                StringCipher.Encrypt(ImageConversion.ImageToBase64(unencryptedContent.image, ImageFormat.Png), password);
            contentToReturn.time = StringCipher.Encrypt(unencryptedContent.time, password);
            return(contentToReturn);
        }
Beispiel #3
0
        public static ImageContent DecryptImageContent(EncryptedImageContent encryptedContent, string password)
        {
            ImageContent contentToReturn = new ImageContent();

            contentToReturn.index = encryptedContent.index;
            contentToReturn.image =
                ImageConversion.Base64ToImage(StringCipher.Decrypt(encryptedContent.encryptedImage, password));
            contentToReturn.time = StringCipher.Decrypt(encryptedContent.time, password);
            return(contentToReturn);
        }
Beispiel #4
0
        /// <summary>
        /// Pulls entries from image table 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 <EncryptedImageContent> GetImageData()
        {
            string           query = String.Format("SELECT * FROM {0} where byUser='******';", DatabaseOperations.imageEntriesTable, user.id);
            SQLiteDataReader databaseDataReader = dbOperations.GetDataReader(query);

            List <EncryptedImageContent> outputList = new List <EncryptedImageContent>();

            while (databaseDataReader.Read())
            {
                EncryptedImageContent contentToAdd = new EncryptedImageContent();

                //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.encryptedImage = databaseDataReader.GetString(2); //content
                contentToAdd.time           = databaseDataReader.GetString(3); //time of entry in clipboarder

                outputList.Add(contentToAdd);
            }
            return(outputList);
        }
Beispiel #5
0
        /// <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;
            }
        }