public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); if (client.Role != UserRoles.Admin) { error = CommandError.NoPermissions; return(null); } var editData = EditUserData.FromJson(SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey)); string password = ""; bool changePassword = false; if (editData.Password != null) { password = SequrityUtils.GetHash(editData.Password); changePassword = true; } UserRoles role; var DBReader = DBConnection.PrepareExecProcedureCommand("GetUserRole", editData.id.ToString()).ExecuteReader(); if (DBReader.Read()) { role = (UserRoles)DBReader.GetInt32(0) - 1; } else { error = CommandError.ClientNotFound; return(null); } DBReader.Close(); int studentGroup = -1; bool changeGroup = false; if (role == UserRoles.Student) { changeGroup = true; DBReader = DBConnection.PrepareExecProcedureCommand("GetStudentGroup", editData.Group).ExecuteReader(); if (DBReader.Read()) { studentGroup = DBReader.GetInt32(0); DBReader.Close(); } else { DBReader.Close(); error = CommandError.BadStudentGroup; return(null); } } DBConnection.PrepareExecProcedureCommand("EditUser", editData.id.ToString(), editData.Firstname, editData.Lastname, password, studentGroup.ToString(), Convert.ToInt32(changePassword).ToString(), Convert.ToInt32(changeGroup).ToString()).ExecuteNonQuery(); error = CommandError.None; return(SequrityUtils.Encrypt("OK", client.SecretDFKey)); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var config = ConfigContainer.GetConfig(); if (client.Role == UserRoles.Teacher && !config.AllowSubjectsAdding) { error = CommandError.SubjectAddNotAllowed; return(null); } if (client.Role != UserRoles.Teacher && client.Role != UserRoles.Admin) { error = CommandError.NoPermissions; return(null); } var subjectName = SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey); var result = DBConnection.PrepareExecProcedureCommand("CheckSubject", subjectName).ExecuteReader(); if (result.Read()) { error = CommandError.SubjectExists; return(null); } result.Close(); DBConnection.PrepareExecProcedureCommand("AddSubject", subjectName).ExecuteNonQuery(); error = CommandError.None; return(SequrityUtils.Encrypt("OK", client.SecretDFKey)); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var testName = SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey); var result = DBConnection.PrepareExecProcedureCommand("CheckTestAvailability", testName).ExecuteReader(); int?testId = null; int testSubject; if (result.Read()) { if (!result.GetBoolean(2)) { error = CommandError.TestNotAvailable; return(null); } testId = result.GetInt32(0); testSubject = result.GetInt32(1); } else { error = CommandError.TestNotFound; return(null); } result.Close(); var test = FileProcessor.LoadTestFile(testId + ".test"); client.CurrentPassTestId = testId; error = CommandError.None; return(SequrityUtils.Encrypt(new NetSerializedTestInfo(test, testName, testSubject).ToJson(), client.SecretDFKey)); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var loginData = LoginData.FromJson(SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey)); var passwordHash = SequrityUtils.GetHash(loginData.Password); var result = DBConnection.PrepareExecProcedureCommand("CheckLoginInfo", loginData.Login, passwordHash).ExecuteReader(); if (result.Read()) { client.UserId = result.GetInt32(0); client.Role = (UserRoles)(result.GetInt32(4) - 1); var info = new AccountInfo(client.UserId, result.GetString(1), result.GetString(2), client.Role.Value, result.IsDBNull(5) ? null : result.GetString(5)); client.UpdateExpiredTime(); result.Close(); error = CommandError.None; return(SequrityUtils.Encrypt(info.ToJson(), client.SecretDFKey)); } else { result.Close(); error = CommandError.BadLoginOrPassword; return(null); } }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var testName = SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey); var result = DBConnection.PrepareExecProcedureCommand("CheckTestCreator", testName).ExecuteReader(); string testFilename = null; int testSubject; if (result.Read()) { if (result.GetInt32(2) != client.UserId) { error = CommandError.NoPermissions; return(null); } testFilename = result.GetInt32(0) + ".test"; testSubject = result.GetInt32(1); } else { error = CommandError.TestNotFound; return(null); } result.Close(); var test = FileProcessor.LoadTestFile(testFilename); error = CommandError.None; return(SequrityUtils.Encrypt(new NetSerializedTestInfo(test, testName, testSubject).ToJson(), client.SecretDFKey)); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); if (client.Role != UserRoles.Student) { error = CommandError.UserNotStudent; return(null); } if (client.CurrentPassTestId == null) { error = CommandError.NoCurrentTest; return(null); } var testResult = TestResult.FromJson(SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey)); var command = DBConnection.GetCommand(); command.CommandText = "call AddTestResult(@param0, @param1, @param2, @param3, @param4)"; command.Parameters.Add(new MySqlParameter("@param0", client.CurrentPassTestId)); command.Parameters.Add(new MySqlParameter("@param1", client.UserId)); command.Parameters.Add(new MySqlParameter("@param2", testResult.Mark)); command.Parameters.Add(new MySqlParameter("@param3", testResult.PassingTime)); command.Parameters.Add(new MySqlParameter("@param4", Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(testResult.Answers)))); command.ExecuteNonQuery(); error = CommandError.None; return(SequrityUtils.Encrypt("OK", client.SecretDFKey)); }
private void onSubjectsRecive(string data) { var response = ResponseInfo.FromJson(data); if (response.Error != null) { MessageBox.Show(CommandErrors.GetErrorMessage(response.Error), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { subjects = JsonConvert.DeserializeObject <Dictionary <int, string> >(SequrityUtils.DecryptString(response.Data, connection.User.SecretKey)); comboBoxSubject.Items.Clear(); if (subjects.Count == 0) { comboBoxSubject.SelectedIndex = -1; } else { foreach (var keyValue in subjects) { comboBoxSubject.Items.Add(keyValue.Value); } comboBoxSubject.SelectedIndex = 0; } } }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var testId = SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey); var result = DBConnection.PrepareExecProcedureCommand("GetExtendedResultSheet", testId).ExecuteReader(); List <ExtendedResultSheetItem> extendedResults = new List <ExtendedResultSheetItem>(); while (result.Read()) { var tmpDateTime = result.GetString(3).Split(':'); var passingTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(tmpDateTime[0]), Convert.ToInt32(tmpDateTime[1]), Convert.ToInt32(tmpDateTime[2])); extendedResults.Add( new ExtendedResultSheetItem( result.GetInt32(0), result.GetString(1), result.GetInt32(2), passingTime, result.GetDateTime(4), JsonConvert.DeserializeObject <List <AnswerListItem> >(Encoding.UTF8.GetString((byte[])result.GetValue(5))) )); } result.Close(); error = CommandError.None; return(SequrityUtils.Encrypt(JsonConvert.SerializeObject(extendedResults), client.SecretDFKey)); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); if (client.Role != UserRoles.Teacher) { error = CommandError.NoPermissions; return(null); } var id = SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey); var result = DBConnection.PrepareExecProcedureCommand("CheckTestCreatorId", id).ExecuteReader(); if (result.Read()) { if (result.GetInt32(0) != client.UserId) { error = CommandError.NoPermissions; return(null); } } else { error = CommandError.TestNotFound; return(null); } result.Close(); DBConnection.PrepareExecProcedureCommand("PassToggle", id).ExecuteNonQuery(); error = CommandError.None; return(SequrityUtils.Encrypt("OK", client.SecretDFKey)); }
private void GetTestsList(bool isCreatorTests) { if (isCreatorTests && connection.User.UserRole != UserRoles.Teacher) { MessageBox.Show("Вы должны иметь права Преподавателя для просмотра данного списка", "Права доступа", MessageBoxButtons.OK, MessageBoxIcon.Warning); comboBoxData.SelectedIndex = 0; } else { connection.SendCommand( new RequestInfo( "GetTestsSheet", SequrityUtils.Encrypt( new TestSheetGetParams( isCreatorTests, textBoxTestNameSurname.Text, subjectsRoles.FirstOrDefault( x => x.Value == (string)comboBoxSubjectRole.SelectedItem) .Key) .ToJson(), connection.User.SecretKey), connection.User.UserToken), onTestListRecive); } }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); client.UpdateExpiredTime(); error = CommandError.None; return(SequrityUtils.Encrypt("OK", client.SecretDFKey)); }
private void buttonAdd_Click(object sender, EventArgs e) { if (textBoxSubjectName.Text == "") { MessageBox.Show("Поле \"Название предмета\" должно быть заполнено!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } connection.SendCommand(new RequestInfo("AddSubject", SequrityUtils.Encrypt(textBoxSubjectName.Text, connection.User.SecretKey), connection.User.UserToken), onRecive); }
public byte[] Execute(out CommandError error) { CngKey dfKey; var publicKey = SequrityUtils.DiffieHellmanGetPublicKey(out dfKey); var userToken = ClientManager.CreateClient(dfKey); error = CommandError.None; return(Encoding.UTF8.GetBytes(userToken + TOKEN_SEPARATOR + publicKey)); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var sheetParams = TestSheetGetParams.FromJson(SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey)); if (client.Role != UserRoles.Teacher && sheetParams.isCreatorTests) { error = CommandError.NoPermissions; return(null); } bool useNameFilter = false; bool useSubjectFilter = false; int subject = -1; string name = ""; if (sheetParams.Name != null && sheetParams.Name != "") { name = sheetParams.Name; useNameFilter = true; } if (sheetParams.Subject != null && sheetParams.Subject > 0) { subject = sheetParams.Subject.Value; useSubjectFilter = true; } MySqlDataReader result; if (sheetParams.isCreatorTests) { result = DBConnection.PrepareExecProcedureCommand("GetTestsCreatorSheet", client.UserId.ToString(), name, subject.ToString(), Convert.ToInt32(useNameFilter).ToString(), Convert.ToInt32(useSubjectFilter).ToString()).ExecuteReader(); } else { result = DBConnection.PrepareExecProcedureCommand("GetTestsSheet", name, subject.ToString(), Convert.ToInt32(useNameFilter).ToString(), Convert.ToInt32(useSubjectFilter).ToString()).ExecuteReader(); } var testList = new List <TestSheetItem>(); while (result.Read()) { testList.Add( new TestSheetItem( result.GetInt32(0), result.GetString(1), result.GetString(2), result.GetDateTime(3), result.GetInt32(4), result.GetBoolean(5) )); } result.Close(); error = CommandError.None; return(SequrityUtils.Encrypt(JsonConvert.SerializeObject(testList), client.SecretDFKey)); }
private void onRecive(string responseData) { var responseInfo = ResponseInfo.FromJson(responseData); if (SequrityUtils.DecryptString(responseInfo.Data, connection.User.SecretKey) == "OK") { expiredTime = expiredTime.AddMinutes(3); } }
private void GetExtendedResultsExcelInfo() { connection.SendCommand( new RequestInfo( "GetExtendedResultSheet", SequrityUtils.Encrypt( TestId.ToString(), connection.User.SecretKey), connection.User.UserToken), onExtendedResultsExcelInfoRecive); }
private void GetExtendedResults(int resultId) { connection.SendCommand( new RequestInfo( "GetExtendedResult", SequrityUtils.Encrypt( resultId.ToString(), connection.User.SecretKey), connection.User.UserToken), onExtendedResultsRecive); }
private void PassToggleTest(int id) { connection.SendCommand( new RequestInfo( "PassToggleTest", SequrityUtils.Encrypt( id.ToString(), connection.User.SecretKey), connection.User.UserToken), onDeletePassToggleRecive); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var newPassword = SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey); var passwordHash = SequrityUtils.GetHash(newPassword); DBConnection.PrepareExecProcedureCommand("ChangePassword", client.UserId.ToString(), passwordHash).ExecuteNonQuery(); error = CommandError.None; return(SequrityUtils.Encrypt("OK", client.SecretDFKey)); }
private void onTestListRecive(string data) { var response = ResponseInfo.FromJson(data); if (response.Error != null) { MessageBox.Show(CommandErrors.GetErrorMessage(response.Error), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { var itemlist = JsonConvert.DeserializeObject <List <TestSheetItem> >(SequrityUtils.DecryptString(response.Data, connection.User.SecretKey)); dataGridView.Rows.Clear(); dataGridView.Columns.Clear(); dataGridView.Columns.Add("Id", "Id"); dataGridView.Columns.Add("Name", "Название"); dataGridView.Columns.Add("Creator", "Создатель"); dataGridView.Columns.Add("EditDate", "Дата изменения"); dataGridView.Columns.Add("Subject", "Предмет/Дисциплина"); dataGridView.Columns.Add("PassAvailable", "Доступен для прохождения"); dataGridView.Columns.Add("ShowResults", "Просмотреть результат"); if (comboBoxData.SelectedIndex == 1) { dataGridView.Columns.Add("OpenClosePassing", "Разрешить/Запретить прохождение"); dataGridView.Columns.Add("Delete", "Удалить"); } foreach (var item in itemlist) { var row = new DataGridViewRow(); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.id.ToString())); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.Name)); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.Creator)); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.EditDate.ToString())); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(subjectsRoles[item.Subject])); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.PassAvailable ? "Да" : "Нет")); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowButtonCell("Просмотреть результаты")); if (comboBoxData.SelectedIndex == 1) { row.Cells.Add(DataGridViewComponents.GetDataGridViewRowButtonCell("Разрешить/Запретить прохождение")); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowButtonCell("Удалить")); } dataGridView.Rows.Add(row); } if (checkBoxDate.Checked) { dataGridView.Sort(dataGridView.Columns[3], ListSortDirection.Ascending); } } }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var config = ConfigContainer.GetConfig(); if (client.Role == null && !config.AllowRegistrationRequests) { error = CommandError.SelfRegistrationNotAllowed; return(null); } if (client.Role == UserRoles.Teacher && !config.AllowStudentsRegistration) { error = CommandError.StudentRegistrationNotAllowed; return(null); } var registerData = RegisterData.FromJson(SequrityUtils.DecryptString(requestData.Data, client.SecretDFKey)); var passwordHash = SequrityUtils.GetHash(registerData.Password); var DBReader = DBConnection.PrepareExecProcedureCommand("GetStudentGroup", registerData.Group).ExecuteReader(); if (DBReader.Read()) { var studentGroup = DBReader.GetInt32(0); DBReader.Close(); DBReader = DBConnection.PrepareExecProcedureCommand("CheckUserLogin", registerData.Login).ExecuteReader(); if (DBReader.Read()) { if (DBReader.GetInt32(0) > 0) { DBReader.Close(); error = CommandError.LoginExists; return(null); } } DBReader.Close(); DBConnection.PrepareExecProcedureCommand("RegisterStudent", registerData.Firstname, registerData.Lastname, registerData.Login, passwordHash, studentGroup.ToString()).ExecuteNonQuery(); error = CommandError.None; return(SequrityUtils.Encrypt("OK", client.SecretDFKey)); } else { DBReader.Close(); error = CommandError.BadStudentGroup; return(null); } }
private void onSaveRecive(string data) { var response = ResponseInfo.FromJson(data); if (response.Error != null) { _error = response.Error; } else if (SequrityUtils.DecryptString(response.Data, connection.User.SecretKey) != "OK") { _error = "UNKNOWN_ERROR"; } }
public bool Save(ITest test, string testName, int subject) { if (testName == null) { throw new ArgumentNullException("Значение testName не может быть null"); } FileProcessor.ClearTmpDir(tmpDir); for (var i = 0; i < test.Questions.Count; i++) { var serialized_question = test.Questions[i].Serialize(); using (FileStream file = new FileStream(tmpDir + @"\" + i + ".dat", FileMode.OpenOrCreate)) { serialized_question.WriteTo(file); } } var formatter = new BinaryFormatter(); using (FileStream file = new FileStream(tmpDir + @"\main.dat", FileMode.OpenOrCreate)) { formatter.Serialize(file, test); } var stream = new MemoryStream(); FileProcessor.CompressFile(tmpDir, stream); var testInfo = new NetSerializedTestInfo(stream.ToArray(), testName, subject); _error = null; connection.SendCommand( new RequestInfo( "SaveTest", SequrityUtils.Encrypt( testInfo.ToJson(), connection.User.SecretKey), connection.User.UserToken), onSaveRecive ); FileProcessor.ClearTmpDir(tmpDir); if (_error == null) { return(true); } else { return(false); } }
private void DeleteTest(int id) { if (MessageBox.Show("Вы уверены?", "Удаление пользователя", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { connection.SendCommand( new RequestInfo( "DeleteTest", SequrityUtils.Encrypt( id.ToString(), connection.User.SecretKey), connection.User.UserToken), onDeletePassToggleRecive); } }
private void UpdateData() { connection.SendCommand( new RequestInfo( "GetTestResults", SequrityUtils.Encrypt( new ServerTestResultGetParams( TestId, textBoxTestNameSurname.Text, checkBoxUseData.Checked ? (DateTime?)dateTimePicker1.Value : null) .ToJson(), connection.User.SecretKey), connection.User.UserToken), onResultsRecive); }
public ITest LoadForEdit(string testName) { _error = null; connection.SendCommand( new RequestInfo( "LoadTestForEdit", SequrityUtils.Encrypt( testName, connection.User.SecretKey), connection.User.UserToken), onLoadRecive ); return(loadedTest); }
private void onUserListRecive(string data) { var response = ResponseInfo.FromJson(data); if (response.Error != null) { MessageBox.Show(CommandErrors.GetErrorMessage(response.Error), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { var userlist = JsonConvert.DeserializeObject <List <UserSheetItem> >(SequrityUtils.DecryptString(response.Data, connection.User.SecretKey)); dataGridView.Rows.Clear(); dataGridView.Columns.Clear(); dataGridView.Columns.Add("Id", "Id"); dataGridView.Columns.Add("Login", "Логин"); dataGridView.Columns.Add("Name", "Имя"); dataGridView.Columns.Add("Surname", "Фамилия"); dataGridView.Columns.Add("Role", "Тип аккаунта"); dataGridView.Columns.Add("Group", "Группа"); if (connection.User.UserRole == UserRoles.Admin) { dataGridView.Columns.Add("Edit", "Изменить"); dataGridView.Columns.Add("Delete", "Удалить"); } foreach (var item in userlist) { var row = new DataGridViewRow(); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.id.ToString())); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.Login)); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.Name)); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.Surname)); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(subjectsRoles[item.Role])); row.Cells.Add(DataGridViewComponents.GetDataGridViewRowTextBoxCell(item.Group)); if (connection.User.UserRole == UserRoles.Admin) { row.Cells.Add(DataGridViewComponents.GetDataGridViewRowButtonCell("Изменить")); if (item.Role != (int)UserRoles.Admin + 1) { row.Cells.Add(DataGridViewComponents.GetDataGridViewRowButtonCell("Удалить")); } } dataGridView.Rows.Add(row); } } }
private void GetUsersList() { connection.SendCommand( new RequestInfo( "GetUsersSheet", SequrityUtils.Encrypt( new UserSheetGetParams( textBoxTestNameSurname.Text, subjectsRoles.FirstOrDefault( x => x.Value == (string)comboBoxSubjectRole.SelectedItem) .Key) .ToJson(), connection.User.SecretKey), connection.User.UserToken), onUserListRecive); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var result = DBConnection.PrepareExecProcedureCommand("GetAvailableTests").ExecuteReader(); var testsList = new List <string>(); while (result.Read()) { testsList.Add(result.GetString(0)); } result.Close(); error = CommandError.None; return(SequrityUtils.Encrypt(JsonConvert.SerializeObject(testsList), client.SecretDFKey)); }
public byte[] Execute(out CommandError error) { var client = ClientManager.GetClient(requestData.UserToken); var result = DBConnection.PrepareExecProcedureCommand("GetSubjectList").ExecuteReader(); var subjectList = new Dictionary <int, string>(); while (result.Read()) { subjectList.Add(result.GetInt32(0), result.GetString(1)); } result.Close(); error = CommandError.None; return(SequrityUtils.Encrypt(JsonConvert.SerializeObject(subjectList), client.SecretDFKey)); }