Exemplo n.º 1
0
bool addTestSignature(FCGI_Stream &stream, jsonParser &jSON)
{
	//string session = jSON.getObject("session", false).asString();
	int task = jSON.getAsIntS("task");//jSON.getObject("task", false).asInt();
	string lang = jSON.getAsString("lang");
	//string signature = jSON.getObject("tests_signatures",false).asString();
	string etalon = jSON.getAsString("etalon");
	Json::FastWriter fastWriter;
	Json::Value signatureValue = jSON.getObject("signature",false);
	std::string signature = fastWriter.write(signatureValue);
	vector<string> labl;
	labl.push_back("task_id");
	labl.push_back("lang");
	labl.push_back("signature");
	labl.push_back("etalon");
	SqlConnectionPool sql;
	bool taskComp = true;
	if (sql.connectToTable(string("tests_signatures"), labl))
	{
		DEBUG("no threa2");
		vector<map<int, string> > records =	sql.getAllRecordsFromTable(
				"`task_id`='"+std::to_string(task)+"'");
		if ((int)records.size()==0)
			taskComp=true;
		else
			taskComp = false;


		vector <map<int, string> > rec;
		map<int, string> temp;
		temp.insert( { 0, std::to_string(task)});
		temp.insert( { 1, lang});
		temp.insert( { 2, str_with_spec_character(signature) });
		temp.insert( { 3, etalon });
		//rec.push_back(temp);

		//MyConnectionPool::getInstance().getAllRecordsFromTable();
		bool res = sql.addRecordsInToTable(temp);
		//MyConnectionPool::getInstance().tt();
		if(!taskComp)
		{
			stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
			JsonValue res;
			res["status"] = "already exist";
			stream << res.toStyledString();
		}
		else //204
			stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n"
			<<"success:"<<to_string(res)<<"signature:"<<signature;


	}
	else
	{
		return false;
	}
	return true;
	// string ip_usera = FCGX_GetParam( "REMOTE_ADDR", request->envp );

}
Exemplo n.º 2
0
bool retreiveTests(FCGI_Stream &stream, jsonParser &jSON)
{
	//string session = jSON.getObject("session", false).asString();
	int task = jSON.getAsIntS("task");//jSON.getObject("task", false).asInt();
	vector<string> labl;
	labl.push_back("task_id");

	bool taskComp = true;
	SqlConnectionPool sql;
	if (sql.connectToTable(string("tests"), labl))
	{
		/*l12("no threa2");
				vector<map<int, string> > records =	SqlConnectionPool::getInstance().getAllRecordsFromTable(
						"`task_id`='"+std::to_string(task)+"'");
				if ((int)records.size()==0)
					taskComp=true;
				else
					taskComp = false;
		 */

		vector<map<int, string> > records = sql.getAllRecordsFromTable("`task_id`='"+std::to_string(task)+"'");
		//MyConnectionPool::getInstance().tt();
		bool recordsEmpty = records.size() == 0;
		if (recordsEmpty)stream << "Status: 204\r\n Content-type: text/html\r\n" << "\r\n" <<"task with this id doesn't excist";
		else
		{
			stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
			JsonValue res;
			res["json"] = records[0][1];
			stream << res.toStyledString();
		}

	}
	else
	{
		return false;
	}
	return true;
	// string ip_usera = FCGX_GetParam( "REMOTE_ADDR", request->envp );

}
Exemplo n.º 3
0
bool addNewtask( FCGI_Stream &stream, jsonParser &jSON, int thread_id, string &error, bool &need_stream)//***
{
	cout.flush();
	cout << jSON.getParsedFromString().toStyledString();
	//return false;

	JsonValue res;
	stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
	if ( !jSON.isJson() )
		{
			string error = "ERROR: json format is not correct. it isn`t json";
			res["status"] = error;
			stream << res.toStyledString();
			stream.close();
			return false;
		}

	if ( !jSON.isValidFields() )
	{
		string error = jSON.getLastError();
		res["status"] = error;
		stream << res.toStyledString();
		stream.close();
		return false;
	}
	string lang = jSON.getAsStringS("lang");
	string table;
	table=ConnectorSQL::getAssignmentTable(lang);

	vector<string> labl;
	labl.push_back("ID");
	labl.push_back("header");
	labl.push_back("etalon");
	labl.push_back("footer");
	labl.push_back("json");
	SqlConnectionPool sql;


	DEBUG("before connectToTable");
	if (sql.connectToTable(table, labl))
	{
		DEBUG("connectedToTable");
		map<int, string> temp;

		//new code for testcases part
		int id = jSON.getAsIntS("task");//t("task",false));
		DEBUG("task");
		DEBUG(std::to_string(id));




		TaskCodeGenerator generator(jSON, thread_id);

		/*{
			string etalona = generator.getEtalon();
			int pre_last_return_pos = 0;
			int last_return_pos = 0;
			while(true)
			{
				int pos = etalona.find("return", last_return_pos + 2);
				if (pos == -1)
					break;
				pre_last_return_pos = last_return_pos;
				last_return_pos = pos;
			}
			etalona.erase(pre_last_return_pos, last_return_pos );

		}*/

		LangCompiler compiler(thread_id);

		string code = sql.generateProgramCode(generator.getHeader(), string(""), generator.getFooter(), lang);
		compiler.compile(code, true, LangCompiler::convertFromName(lang), 1);
		string errors = compiler.getWarningErr();

		int lang_int = jSON.getAsIntS("lang");

		if (errors.size() == 0)
		{

			if (lang_int == (int) LangCompiler::Flag_JS)
			{
				errors = compiler.getResult();
				if (errors.find("error") == -1)
					errors = "";
			}
		}



		if (errors.size() )
		{
			error = "failed code compilation: " + errors ;
			//res["status"] = "failed";
			res["status"] = error;
			stream << res.toStyledString();
			stream.close();

			need_stream = false;
			return false;
			/*
			res["status"] = "failed 0000";
			res["table"] = table;
						res["id"] = to_string(id);
			stream << res.toStyledString();
			stream.close();
			return true;*/
		}

		string footer = generator.getFooter();
		if (lang_int != LangCompiler::Flag_Java)
			footer.erase(0,  footer.find("\n"));


		int valuesCount = 0;
		temp.insert( { valuesCount++, std::to_string(id) });
		temp.insert( { valuesCount++, (generator.getHeader())});
		temp.insert( { valuesCount++, (generator.getEtalon())});
		DEBUG("qwe33");
		temp.insert( { valuesCount++, (footer)});
		temp.insert({valuesCount++, (jSON.getJson())});
		DEBUG("temp.insert");




		map<int,string> where;
		where.insert({0,temp[0]});
		int status = generator.getStatus();

		if (status == 0 && sql.addRecordsInToTable(temp))
		{
			res["status"] = "success";
			res["table"] = table;
			res["id"] = to_string(id);
		}
		else
			if (generator.getStatus() == 0 && sql.updateRecordsInToTable(temp, where))
			{
				res["status"] = "updated";
				res["table"] = table;
				res["id"] = to_string(id);
			}
			else res["status"] = "failed";

		stream << res.toStyledString();
		stream.close();

		need_stream = false;
		return true;
	}
	else
	{
		res["status"] = "failed";

		stream << res.toStyledString();
		stream.close();

		need_stream = false;
		return false;
	}
}
Exemplo n.º 4
0
bool addTestsToTask( FCGI_Stream &stream, jsonParser &jSON, int thread_id, string &error, bool &need_stream)
{



	//string lang = jSON.getAsStringS("lang");
	string table;
	table = ConnectorSQL::getAssignmentTable(" hahaha dont need");

	vector<string> labl = ConnectorSQL::getAssignmentTableLabels();
	/*labl.push_back("ID");
		labl.push_back("header");
		labl.push_back("etalon");
		labl.push_back("footer");
		labl.push_back("json");*/
	SqlConnectionPool sql;

	//stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
	JsonValue res;

	if (sql.connectToTable(table, labl))
	{

		if (!jSON.mustExistBeInt(jSON.getParsedFromString()[FIELD_TASK_ID], "task"))
		{
			stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
			res["status"] = "failed";
			res["error"] = jSON.getLastError();
			stream << res.toStyledString();
			stream.close();
			return false;
		}

		int task = jSON.getAsIntS("task");

		string json_prev_task = sql.getJsonFromTable(task);

		jsonParser parse(json_prev_task);

		if (!(parse.isValidFields() && parse.isJson() ))
		{
			stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
			res["status"] = "failed";
			res["error"] = "Task jsonf from DB invalid";
			stream << res.toStyledString();
			stream.close();
			return false;
		}

		Value json_db(parse.getParsedFromString());


		if ( !jSON.parseAddUtest(json_db))
		{
			stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
			string last_err = jSON.getLastError();
			last_err = last_err.erase(0, last_err.find("correct") + 8);
			res["json"] = "";
			res["status"] = "failed";
			res["error"] = "Unit tests don`t match structure of task: " + last_err;

			stream << res.toStyledString();
			stream.close();
			return false;
		}

		Value json_tests = jSON.getJsonValue();

		Value res_value = mergeUtestsAndTask(json_tests, json_db);

		string res_value_str = res_value.toStyledString();
		res_value_str = replaceSlashTabsParagBreakets( res_value_str );


		Value val; //(res_value_str);
		Json::Reader reader;
		reader.parse( res_value_str.c_str(), val );

		jsonParser merged_json;
		//merged_json.setParsedFromString(val);
		merged_json.setJson(res_value_str);
		//setJson(res_value_str);



		cout.flush();
		//cout << val.toStyledString();
		//cout << res_value_str;

		//	cout << merged_json.getParsedFromString().toStyledString();
		//merged_json.setParsedFromString(Json(res_value.toStyledString());



		//cout << merged_json.getParsedFromString();

		/*
		map<int, string> temp;

		int valuesCount = 0;
			temp.insert( { valuesCount++, std::to_string(task) });
			temp.insert( { valuesCount++, (generator.getHeader())});
			temp.insert( { valuesCount++, (generator.getEtalon())});
			DEBUG("qwe33");
			temp.insert( { valuesCount++, (footer)});
			temp.insert({valuesCount++, (jSON.getJson())});
		 */

		//return false;
		return addNewtask(stream, merged_json, thread_id, error, need_stream);
		//string json_utest = jSON.getJson();
		//json_db[FUNCTION]{FIELD_UNIT_TESTS_NUM] = "5";

		//	json_db.append(jSON.getJsonValue());
		//cout << json_tests.toStyledString();

	}
	else
	{
		res["json"] = "";
		res["status"] = "failed";
		res["error"] = "Connection to assignment table failed";
		stream << res.toStyledString();
		stream.close();
		return false;
	}
}
Exemplo n.º 5
0
/*
 *
 * 					RESULT_STATUS
 *
 */
bool result_status(FCGI_Stream &stream, jsonParser &jSON, string operation)
{
	string session = jSON.getAsStringS("session");
	string jobid = jSON.getAsStringS("jobid");//			Object("jobid", false).asUInt();578565
	//TO BE CONTINUED ...
	vector<string> labl;

	labl.push_back("id");
	labl.push_back("session");
	labl.push_back("jobid");
	labl.push_back("status");
	labl.push_back("date");
	labl.push_back("result");
	labl.push_back("warning");
	SqlConnectionPool sql;
	if (sql.connectToTable("results", labl)	== true)
	{
		string s_datime = getDateTime(); //'YYYY-MM-DD HH:MM:SS'
		map<int, string> temp;
		temp.insert( { 1, session });
		temp.insert( { 2, (jobid) });
		//3,skip
		temp.insert( { 4, s_datime });
		//4
		vector<map<int, string> > records =	sql.getAllRecordsFromTable(
				"`session`='"+session+"' AND `jobid`='"+(jobid)+"'");
		//	logfile::addLog(std::to_string(records.size()));
		//for (int i=0; i< records.size(); i++)

		/*Cool start for future code, NO delete
		 * logfile::addLog("Id:"+records[i][0]);
			 logfile::addLog("Session:"+records[i][1]);
			 logfile::addLog("jobId:"+records[i][2]);
			 logfile::addLog("requested status for session:"+session+":"+records[i][3]);
			 logfile::addLog("date:"+records[i][4]);
			 logfile::addLog("result:"+records[i][5]);
			 logfile::addLog("warning:"+records[i][6]);
		 */
		/*Cool code no delete
			 stream << "Id:"+records[i][0] << "\n";
			 stream << "Session:"+records[i][1] << "\n";
			 stream << "jobId:"+records[i][2] << "\n";
		 */
		//stream << "status:" +	 records[i].find(keys[r])->second ;
		/*
		 * RESULT
		 */
		//cerr << "before write to stream";

		stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";

		//cerr << "after write to stream";

		JsonValue res;
		if(records.size() > 0)
		{
			res["status"] = records[0][3];
			if (operation == "result" || operation == "r")
			{
				res["date"] = records[0][4];
				res["warning"] = records[0][6];
				//////////////////////////////////////////////////NEW//17.11.15

				/*		string result = records[0][5];
				  smatch m;
				  regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"


				  while (std::regex_search (result,m,e)) {
				    for (auto x:m) std::cout << x << " ";
				    std::cout << std::endl;
				    result = m.suffix().str();
				  }
				 */
				res["testResult"] = JsonValue(arrayValue);

				string part = records[0][5];
				int start = part.find('@');

				if(start == string::npos)
				{
					int position = records[0][5].find("exception");
					if( string::npos != position)
					{
						int p = records[0][5].substr(0, position).find_last_of("\n");
						res["result"] = records[0][5].substr(p + 1);//records[0][5].substr(0, p - 1);
						res["done"] = false;//records[0][5].substr(p);
					}
					else
						res["result"] = records[0][5];

				}
				else
				{
					res["result"] = part.substr(0, start);
					int count = 0;
					bool done = true;
					while(start++ != string::npos)// need test after first fail?
					{
						int next = part.substr(start).find('@');
						string number;
						if(next != string::npos)
						{
							if(next -1 >= 0 && part[start + next - 1] == '!')
							{
								number = part.substr(start, next - 1);
								res["testResult"][count] = JsonValue(false);
								done = false;
							}
							else
							{
								number = part.substr(start, next );
								res["testResult"][count] = JsonValue(true);
							}
						}
						part = part.substr(start + next + 1);
						count++;
						start = part.find('@');
					}
					res["done"] = JsonValue(done);
				}
			}
		}
		else
			res["status"] = "not found";

		stream << res.toStyledString();

		//	stream << "status:" + records[0][3] << "\n\n";
		/*Cool code no delete
		 stream << "date:"+records[i][4] << "\n";
		 stream << "result:"+records[i][5] << "\n";
		 stream << "warning:"+records[i][6] << "\n";
		 */
		//logfile::addLog("Table 'results' outputed");
		cout.flush();
	}
	else
		return false;
	return true;
}
Exemplo n.º 6
0
void processTask(int id,Job job) {

	//	logfile::addLog("Connection");
	// ConnectorSQL connector ;

	// int id = ((int *)a)[0];


	//char * inputSTR;
	LangCompiler compiler(id);
	/*
	 * input from PHP form // not use
	 *
	 * 	stream >> inputSTR; // test input
	 char *code = stream.getFormParam("text");
	 char *name = stream.getFormParam("name");
	 */

	/*
	 * problem with CodeClear need fix
	 *
	 CodeClear clr;
	 string outStr = code;
	 clr.ClearText(outStr);*/
	DEBUG("before code empty check");
	if (!job.code.empty())
	{

		vector<string> labl;
		//ADD NEW STARTED COMPILING INFO TO DATABASE
		DEBUG("Before connect to results");
		SqlConnectionPool sql;

		labl.push_back("ID");
		labl.push_back("header");
		labl.push_back("etalon");
		labl.push_back("footer");



		string table;
		table = ConnectorSQL::getAssignmentTable(job.lang);
		if (sql.connectToTable(table, labl))
		{
			job.code =
					sql.getCustomCodeOfProgram(
							to_string(job.task), job.code, id,job.lang);
			DEBUG(job.code);
		}

		INFO(to_string(id)+ " Start compiler");
		JsonValue res;

		compiler.compile(job.code, true, LangCompiler::convertFromName(job.lang),0);


		string date = logfile::getDateStamp();
		res["date"] = date;

		string rezulta = compiler.getResult();
		res["result"] = rezulta;
		string warning = compiler.getWarningErr();
		res["warnings"] = warning;
		DEBUG( res.toStyledString());


		labl.clear();
		//UPDATE COMPILING INFO IN DB
		labl.push_back("id");
		labl.push_back("session");
		labl.push_back("jobid");
		labl.push_back("status");
		labl.push_back("date");
		labl.push_back("result");
		labl.push_back("warning");
		if (sql.connectToTable("results", labl))
		{
			string s_datime = getDateTime(); //'YYYY-MM-DD HH:MM:SS'
			map<int, string> temp;
			temp.insert( { 1, job.session });
			temp.insert( { 2, (job.jobid) });
			if(compiler.getResult().size() == 0)
				temp.insert( { 3, "failed"});
			else
				temp.insert( { 3, "done"});
			temp.insert( { 4, s_datime });
			temp.insert( { 5, compiler.getResult()});
			temp.insert( { 6, compiler.getWarningErr() });
			//4j
			//string where = "`results`.`jobid`='"+to_string(job.jobid)+"' AND `results`.`session`='"+job.session+"'";
			map<int,string> where;
			where.insert({1,job.session});
			where.insert({2,(job.jobid)});
			//ConnectorSQL::getInstance().updateRecordsInToTable(temp,wher);
			sql.updateRecordsInToTable(temp,where);

		}


		INFO(to_string(id) + " Stop compiler");

	}
}
Exemplo n.º 7
0
void *receiveTask(void *a)
{
	DEBUG("void *receiveTask(void *a) ");
	ThreadArguments argumento = ((ThreadArguments *) a)[0];

	int rc, i;
	int id = argumento.id;
	char * inputSTR;
	FCGX_Request *request;
	FCGI_Stream stream(socketId);
	ErrorResponder errorResponder(&stream);
	request = stream.getRequest();
	INFO("Thread: " + argumento.id);
	//string lang;

	for (;;)
	{
		if (stream.multiIsRequest()) { /////////////!!!!!!!!!!!!!!!!!!!
			//	break;
			if (strcmp(stream.getRequestMethod(), "OPTIONS") == 0)
			{
				string headers;
				char* accessControlRequestHeaders = FCGX_GetParam("HTTP_ACCESS_CONTROL_REQUEST_HEADERS",  request->envp);
				if(accessControlRequestHeaders != NULL)
					headers += "Access-Control-Request-Headers: " + string(accessControlRequestHeaders) + "\r\n";
				char* accessControlRequestMethod = FCGX_GetParam("HTTP_ACCESS_CONTROL_REQUEST_METHOD",  request->envp);
				if(accessControlRequestMethod != NULL)
					headers += "Access-Control-Request-Method: " + string(accessControlRequestMethod) + "\r\n";

				stream << headers <<  ("Access-Control-Max-Age: 86400\r\nStatus: 200\r\nContent-type: text/plain\r\n") << "\r\n";
				//stream.showHeaders();
				stream.close();
				continue;
			}
			else
				if (strcmp(stream.getRequestMethod(), "GET") == 0)
				{
					//logfile::addLog(id, "Request Method don't POST !!!");
					string current =  stream.getSenderAdress();
					if (current == "/version")
					{
						errorResponder.showString(999, VERSION_INTERPRETATOR);
					}
					else
						errorResponder.showError(404);
					//INFO("session closed");
					stream.close();
					continue;
				}

			if(!SqlConnectionPool::getInstance().isConnected())
			{
				INFO("Try reconect to DB");
				if(!SqlConnectionPool::getInstance().reconect())
				{
					errorResponder.showError(505, "DataBaseERR");
					stream.close();
					continue;  //////////////////////////////
				}
			}
			DEBUG("Before jsonParser jSON(stream.getRequestBuffer());");
			jsonParser jSON(stream.getRequestBuffer());

			DEBUG("Before parsing successful check");
			bool isValidFields = jSON.isValidFields();
			bool parsingSuccessful = jSON.isJson() && isValidFields;
			DEBUG("Before jSON.isJson()");
			if (parsingSuccessful)
				DEBUG("Before jSON.isValidFields()");
			//parsingSuccessful = jSON.isValidFields(); //reader.parse( str, parsedFromString, false);// IsJSON
			DEBUG("Before parsing");
			/*
			 * ALL OK STARTif (SqlConnectionPool::getInstance().connectToTable(string("results"), labl))
			 */

			string errora = "";

			bool need_stream = true;

			if (parsingSuccessful)
			{
				string ip_usera = FCGX_GetParam("REMOTE_ADDR", request->envp);
				cout.flush();
				INFO("Parsing successful");

				string operation = jSON.getAsStringS("operation");
				bool succsesful = true;
				/*
				 * OPERATION ADDTASK
				 */
				if (operation == "addtask")
				{
					/*if(!addNewtask(stream, jSON, id, errora))
						succsesful = false;*/
					addNewtask(stream, jSON, id, errora, need_stream);
				}
				else
					if (operation == "getJson")
					{
						if(!getJson(stream, jSON, id))
							succsesful = false;
					}
					else
						if (operation == "copyTask")
						{
							if(!copyTask(stream, jSON, id, errora, need_stream))
								succsesful = false;
						}
						else
							if (operation == "start" || operation == "s")
							{
								if(!start(stream, jSON, FCGX_GetParam("REMOTE_ADDR", request->envp), errora, need_stream))
									succsesful = false;
							}
							else
								if (operation == "addUtest" || operation == "u")
								{
									addTestsToTask(stream, jSON, id, errora, need_stream);
								}
								else
									if (operation == "addtestsig")
									{
										if(!addTestSignature(stream, jSON))
											succsesful = false;
									}
									else
										if (operation == "addtestval")
										{
											if (!addTestValues(stream,jSON))
												succsesful = false;
										}
										else
											if (operation == "add_tests")
											{
												if (!addTests(stream,jSON))
													succsesful = false;
											}
											else
												if (operation == "retreive_tests")
												{
													if (!retreiveTests(stream,jSON))
														succsesful = false;
												}
												else
													if (operation == "result" || operation == "status" || operation == "r" )
													{
														if(!result_status(stream, jSON, operation))
															succsesful = false;
													}
													else
														if (operation == "getToken")
														{
															if(!TokenSystem::getObject()->generationToken(stream, jSON))
																succsesful = false;
														}
														else
															if (operation == "getFromToken")
															{
																if(!TokenSystem::getObject()->getFromToken(stream, jSON))
																	succsesful = false;
															}
															else
															{
																errorResponder.showError(505, "operation is invalid");
															}

				if(!succsesful)
				{
					if (need_stream)
					{
						JsonValue res;
						stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
						string error = jSON.getLastError() + "\n" + errora;
						/*	errorResponder.showError(400, error);
					stream.close();*/

						res["status"] = error;
						stream << res.toStyledString();
						stream.close();
					}
					continue;
				}

			}
			else
			{
				if (need_stream)
				{
					JsonValue res;
					stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
					//logfile::addLog(id,	"Json format is not correct!!! \n::::::::::::::::::::::::\n" + stream.getRequestBuffer() + "\n::::::::::::::::::::::::");
					/*errorResponder.showError(400, jSON.getLastError());
				stream.close();*/

					res["status"] = jSON.getLastError();
					stream << res.toStyledString();
					stream.close();
				}

				continue;
			}

		}
	}
	//close session
	INFO("session closed");
	stream.close();
	return NULL;
}
Exemplo n.º 8
0
bool copyTask( FCGI_Stream &stream, jsonParser &jSON, int thread_id, string &error, bool &need_stream)
{
	cout.flush();
	JsonValue res;
	stream << "Status: 200\r\n Content-type: text/html\r\n" << "\r\n";
	if ( !jSON.isJson() )
	{
		string error = "ERROR: json format is not correct. it isn`t json";
		res["status"] = error;
		stream << res.toStyledString();
		stream.close();
		return false;
	}

	if ( !jSON.isValidFields() )
	{
		string error = jSON.getLastError();
		res["status"] = error;
		stream << res.toStyledString();
		stream.close();
		return false;
	}

	string table;
	table=ConnectorSQL::getAssignmentTable("");

	vector<string> labl;
	labl.push_back("ID");
	labl.push_back("header");
	labl.push_back("etalon");
	labl.push_back("footer");
	labl.push_back("json");
	SqlConnectionPool sql;

	if (sql.connectToTable(table, labl))
	{
		int id = jSON.getAsIntS("task");
		int new_id = jSON.getAsIntS("new_task");

		if ( sql.copyRecordFromIdToNewId(id, new_id))
		{
			res["status"] = "success";
			res["table"] = table;
			res["id"] = to_string(id);
		}
		else
		{
			if ( sql.updateRecordFromIdToNewId(id, new_id))
			{
				res["status"] = "updated";
				res["table"] = table;
				res["id"] = to_string(id);
			}
			else
				res["status"] = "failed";


		}
		stream << res.toStyledString();
					stream.close();

					need_stream = false;
					return true;
	}
	else
	{
		res["status"] = "failed";

		stream << res.toStyledString();
		stream.close();

		need_stream = false;
		return false;
	}
}