static void server_post(http_request_t request, socket_t* client, leading_t** leadings){ int id = 0; int count = leading_leadingsCount(leadings); char buffer[2000] =""; char* str; char* name = http_request_getArg(&request, "name"); char* surname = http_request_getArg(&request, "surname"); char* birthdate = http_request_getArg(&request, "birthdate"); char* experience = http_request_getArg(&request, "experience"); char* rating = http_request_getArg(&request, "rating"); if(strlen(name) <= 1 || strlen(surname) <= 1 || strlen(birthdate) <= 1){ server_send(client, "Name/Surname/Birthday wasn't filled in" "<p><a href=\"/leadings/new/\">Back to POST</a></p>"); return; } str = birthdate; if(strlen(birthdate) > 10 || str[4] != '-' || str[7] != '-' || isdigit(birthdate[0])==0 || isdigit(experience[0]) == 0 || isdigit(rating[0])==0){ server_send(client, "Wrong data!" "<p><a href=\"/leadings/new/\">Back to POST</a></p>"); return; } if(experience == " ") experience = "0"; if(rating == " ") rating = "0.0"; if(count >= MAX_LEADINGS){ char fail[] = "Limit of leadings!"; sprintf(buffer, "HTTP/1.1 404 \n" "Content-Type: text\n" "Content-Length: %i\r\n\r\n" "\n%s", strlen(fail), fail); socket_write_string(client, buffer); socket_close(client); return; } for(int i = 0; i<MAX_LEADINGS; i++, id++) { if(leading_getId(leadings[i]) == -1) break; } int exp = atoi(experience); double rate = atof(rating); leading_fill(leadings[id], id, name, surname, birthdate, exp, rate); server_send(client, "Success" "<p><a href=\"/leadings/\">All leadings</a></p>"); }
void db_edit(http_request_t req, db_t* self) { puts(req.uri); const char * name_b= http_request_getArg(&req,"name"); const char * surname= http_request_getArg(&req,"surname"); const char * age_s= http_request_getArg(&req,"age"); int id=atoi(strpbrk(req.uri,"0123456789")); ptrdiff_t nameLeng=(strpbrk(req.uri,"0123456789")-1)-(req.uri+9); char *name=malloc(sizeof(char)*nameLeng+1); memcpy(name,req.uri+9,nameLeng); name[nameLeng]='\0'; sqlite3_stmt * stmt = NULL; stmt=db_getrow(self,name,id); int check=0; int age; for(int i=0; i<strlen(age_s); i++) if(!isdigit(age_s[i])) check++; if(check==0) age=atoi(age_s); else { return -1; } char text[500]; sprintf(text,"UPDATE %s SET Name = ?, Surname = ?, age = ? WHERE Name = ?;",name); sqlite3_stmt * res = NULL; sqlite3_prepare_v2(self->db, text, strlen(text), &res, NULL); sqlite3_bind_text(res, 1, name_b,strlen(name_b),SQLITE_TRANSIENT); sqlite3_bind_text(res, 2, surname,strlen(surname),SQLITE_TRANSIENT); sqlite3_bind_int(res, 3, age); sqlite3_bind_text(res, 4, (char*)sqlite3_column_text(stmt, 0),strlen((const char*)sqlite3_column_text(stmt, 0)),SQLITE_TRANSIENT); int rc = sqlite3_step(res); if (SQLITE_ERROR == rc) { printf("can't get by id\n"); exit(1); } sqlite3_finalize(res); sqlite3_finalize(stmt); }
int db_insert(db_t * self, char * name,http_request_t req) { const char * name_b= http_request_getArg(&req,"name"); const char * surname= http_request_getArg(&req,"surname"); const char * age_s= http_request_getArg(&req,"age"); int check=0; int age; for(int i=0; i<strlen(age_s); i++) if(!isdigit(age_s[i])) check++; if(check==0) age=atoi(age_s); else { return -1; } sqlite3_stmt * stmt = NULL; char buf[500]; sprintf(buf,"INSERT INTO %s (Name,Surname,age) VALUES(?, ?, ?);",name); sqlite3_prepare_v2(self->db, buf, strlen(buf), &stmt, 0); sqlite3_bind_text(stmt, 1,name_b, strlen(name_b),SQLITE_TRANSIENT); sqlite3_bind_text(stmt, 2,surname,strlen(surname),SQLITE_TRANSIENT); sqlite3_bind_int(stmt, 3, age); int rc = sqlite3_step(stmt); if (SQLITE_ERROR == rc) { printf("can't get by id\n"); exit(1); } sqlite3_finalize(stmt); return 0; }
static void server_post(http_request_t request, socket_t* client, db_t* base) { char buffer[2000] =""; char* name = http_request_getArg(&request, "name"); char* surname = http_request_getArg(&request, "surname"); char* salary = http_request_getArg(&request, "salary"); char* year = http_request_getArg(&request, "year"); if(strlen(name) <= 1 || strlen(surname) <= 1) { server_send(client, "Name/Surname wasn't filled in" "<p><a href=\"/workers/new/\">Back to POST</a></p>"); return; } if(isdigit(salary[0]) == 0 || isdigit(year[0])==0) { server_send(client, "Wrong data!" "<p><a href=\"/workers/new/\">Back to POST</a></p>"); return; } if(salary == " ") salary = "0"; if(year == " ") year = "0"; worker_t* worker = worker_new(); worker_fill(worker, -1, name, surname, atoi(salary), atoi(year)); db_insertWorker(base, worker); worker_free(worker); server_send(client, "Success" "<p><a href=\"/workers/\">All workers</a></p>"); }
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>> void server_pensioners(socket_t * client, resource_t * lt, http_request_t * req) { char buf[10200] = ""; if(strcmp(req->method, "GET") == 0) { cJSON * arr = cJSON_CreateArray(); for(int i = 0; i < resource_getCnt(lt); i++) { cJSON * pens = cJSON_CreateObject(); pensioner_t * ps = resource_getPens(lt, i); cJSON_AddItemToObject(pens, "id", cJSON_CreateNumber(pensioner_getID(ps))); cJSON_AddItemToObject(pens, "name", cJSON_CreateString(pensioner_getName(ps))); cJSON_AddItemToObject(pens, "surname", cJSON_CreateString(pensioner_getSurname(ps))); cJSON_AddItemToObject(pens, "year", cJSON_CreateString(pensioner_getYear(ps))); cJSON_AddItemToObject(pens, "experience", cJSON_CreateNumber(pensioner_getExperience(ps))); cJSON_AddItemToObject(pens, "pension", cJSON_CreateNumber(pensioner_getPension(ps))); cJSON_AddItemToArray(arr, pens); } char * Jtext = cJSON_Print(arr); char * textP = textToBuf_JSON(Jtext); strcat(buf, textP); free(textP); } else if(strcmp(req->method, "POST") == 0) { pensioner_t * pens = pensioner_new(); char * id = (char *)http_request_getArg(req, "id"); char * name = (char *)http_request_getArg(req, "name"); char * surname = (char *)http_request_getArg(req, "surname"); char * birthdate = (char *)http_request_getArg(req, "birthday"); char * pension = (char *)http_request_getArg(req, "pension"); char * experience = (char *)http_request_getArg(req, "experience"); pensioner_set(pens, atoi(id), birthdate, name, surname, atof(pension), atoi(experience)); resource_add(lt, pens); char * Jst = pensioner_toJSON(pens); char * pageT = textToBuf_JSON(Jst); strcat(buf, pageT); free(pageT); } socket_write_string(client, buf); socket_close(client); }
void server_newHtmlPupil(socket_t * client,list_t * pupils,char * buf,db_t * db){ http_request_t req = http_request_parse(buf); char * id = (char *)http_request_getArg(&req, "id"); char * name = (char *)http_request_getArg(&req, "name"); char * surname = (char *)http_request_getArg(&req, "surname"); char * score = (char *)http_request_getArg(&req, "score"); char * Class = (char *)http_request_getArg(&req, "class"); char * growth = (char *)http_request_getArg(&req,"growth"); // if(checkInputData(name,surname,birthday,sex,Class,score,year) == 1){ pupil_t * p = pupil_create(); pupil_addInfo(p,db_getNewId(db),name,surname, atoi(Class),atof(score),atof(growth)); printf("%s",pupil_getName(p)); list_push_back(pupils,p); db_addPupil(db,pupils,buf); server_sendHtml(client,pupil_getHtml(p,atoi(id))); // } }
//COMMAND: GET POST DELETE FOR A SINGLE INVESTOR (BY INDEX) //RETURNS: INVESTOR MODIFIED INVESTOR MSG ABOUT SUCCESSFUL DELETING =====OR===== ERROR MSG void server_investorById(socket_t * client, http_request_t * req, int index) { char strbuf[10240]; //=====GET COMMAND===== if (strcmp(req->method, "GET") == 0) { char * invJSON = investor_parseToJSON(&investorArray[index]); sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(invJSON), invJSON); free(invJSON); } //=====POST COMMAND===== else if (strcmp(req->method, "POST") == 0) { //ID FIELD NOT ALLOWED TO BE MODIFIED! //EVERY FIELD IS BRIEFLY CHECKED ON VALIDITY //NAME FIELD char * str = http_request_getArg(req, "name"); if (str != NULL && strlen(str) < 25) { investorArray[index].name = str; } //NICKNAME FIELD str = http_request_getArg(req, "nickname"); if (str != NULL && strlen(str) < 25) { investorArray[index].nickname = str; } //SURNAME FIELD str = http_request_getArg(req, "surname"); if (str != NULL && strlen(str) < 25) { investorArray[index].surname = str; } //RATING FIELD str = http_request_getArg(req, "rating"); if (str != NULL && isdigit(str[0]) != 0 && strlen(str) < 7) { investorArray[index].rating = atof(str); } //FIRST INVESTMENT (DATE STRUCT) FIELD str = http_request_getArg(req, "firstInvestmentDate"); if (str != NULL) { //CHECKING IF DATA OF EVERY FIELD IS VALID if (str[5] != NULL && str[5] == '-' && atoi(str) > 1900 && atoi(str) < 2016) { str = strtok(str, "-"); str = strtok(NULL, "-"); if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 12)) { str = strtok(NULL, "-"); if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 31)) { //ALL DATA IS VALID: str = http_request_getArg(req, "firstInvestmentDate"); //YEAR investorArray[index].firstInv.tm_year = atoi(str); //MON str = strtok(str, "-"); str = strtok(NULL, "-"); investorArray[index].firstInv.tm_mon = atoi(str); //DAY str = strtok(NULL, "-"); investorArray[index].firstInv.tm_mday = atoi(str); } } } } //EXPERIENCE FIELD str = http_request_getArg(req, "experienceYears"); if (str != NULL && isdigit(str[0]) != 0 && atoi(str) >= 0) { investorArray[index].exp = atoi(str); } //TOTAL MONEY INVESTED FIELD str = http_request_getArg(req, "totalMoneyInvested"); if (str != NULL && isdigit(str[0]) != 0 && atoi(str) >= 0) { investorArray[index].moneyInv = atoi(str); } //CURRENT INVESTMENT PROJECT FIELD str = http_request_getArg(req, "curInvest"); if (str != NULL && strlen(str) < 100) { investorArray[index].curInv = str; } char * modInvJSON = investor_parseToJSON(&investorArray[index]); //PRINTF'ING TO CONSOLE printf("New student (instead of %i-th one):\n%s\n", index, modInvJSON); //GIVING INFO TO CLIENT sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(modInvJSON), modInvJSON); free(modInvJSON); } //=====DELETE COMMAND===== else if (strcmp(req->method, "DELETE") == 0) { investorArray[index] = investor_new(); //ID FIELD IS KEPT! investorArray[index].id = index; char * delInvJSON = investor_parseToJSON(&investorArray[index]); //PRINTF'ING TO CONSOLE printf("Deleted student (%i-th one):\n%s\n", index, delInvJSON); //GIVING INFO TO CLIENT char * delText = "Student deleted successfully!"; sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(delText), delText); free(delInvJSON); } //=====INVALID COMMAND===== else { char * errText = "Invalid command!"; sprintf(strbuf, "HTTP/1.1 404 \n" "Content-Type: text/html\n" "Content-Length: %zu\n" "\n%s", strlen(errText), errText); } socket_write_string(client, strbuf); socket_close(client); }
void server_POST(http_request_t req,socket_t * clientSocket,lanser** freelanser) { const char * name= http_request_getArg(&req,"name"); const char * surname= http_request_getArg(&req,"surname"); const char * age= http_request_getArg(&req,"age"); const char * date= http_request_getArg(&req,"date"); const char * salary= http_request_getArg(&req,"salary"); if(name==NULL || surname==NULL || age ==NULL || date==NULL || salary==NULL) { socket_write_string(clientSocket,"<body> POST argument/arguments is/are empty<br>" "<a href=""/Freelancer/"">To Freelancers</a></body>"); return; } char buf[1000]=""; int id; if(strpbrk(req.uri,"-0123456789")) { id=atoi(strpbrk(req.uri,"-0123456789")); if(id>9 || id<0) { socket_write_string(clientSocket,"<body>Id not found<br>" "<a href=""/Freelancer/"">To Freelancers</a></body>"); return; } } else { socket_write_string(clientSocket,"<body>Wrong id<br>" "<a href=""/Freelancer/"">To Freelancers</a></body>"); return; } int check=0; int dot=0; for(int i=0; i<strlen(age); i++) if(!isdigit(age[i])) { if(age[i]=='.'||dot==0) dot++; else check++; } for(int i=0; i<strlen(salary); i++) if(!isdigit(salary[i])) check++; for(int i=0; i<4; i++) if(!isdigit(date[i])) check++; if(date[4]!='-') check++; for(int i=5; i<7; i++) if(!isdigit(date[i])) check++; if(date[7]!='-') check++; for(int i=8; i<strlen(date); i++) if(!isdigit(date[i])) check++; if(atoi(date+5)>12) check++; if(dot>1||dot<0) { socket_write_string(clientSocket,"<body>Invalid POST argument<br>" "<a href=""/Freelancer/"">To Freelancers</a></body>"); return; } if(check==0) { Freelanser_set(freelanser[id],name,surname,atof(age),date,atoi(salary)); server_sent(clientSocket, "<body>Post success<br>" "<a href=\"/Freelancer/\">To Freelancers</a></body>"); } else socket_write_string(clientSocket,"<body>Invalid POST argument<br>" "<a href=\"/Freelancer/\">To Freelancers</a></body>"); }
void server_musicianById(socket_t * client, http_request_t * req, const char * pathBuf) { const char * pattern = "/musicians/"; char * c = NULL; const char * Text = " \0"; char strbuf[10240]; error_t * err = error_t_new (); int count = get_size_mus_arr (); long musIndex = strtol(pathBuf + strlen(pattern), &c, 10); if (musIndex < 0 || musIndex >= count) { error_t_add_err(err, NULL, "Wrong Index of musician"); server_sendJson(client, &err); return; } if (strcmp (req->method, "GET") == 0) { const char * musJson = musician_toJSON(&musicians_arr[musIndex]); sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(musJson), musJson); free(musJson); } else if (strcmp (req->method, "POST") == 0) { musicians_arr[musIndex] = musician_empty(); musicians_arr[musIndex].id = musIndex; const char * str = http_request_getArg(req, "name"); if (strlen(str) > 0 && strlen (str) < 20) { musicians_arr[musIndex].name = str; str = http_request_getArg(req, "surname"); if (strlen(str) > 0 && strlen (str) < 20) { musicians_arr[musIndex].surname = str; str = http_request_getArg (req, "birthdate"); if (strlen(str) > 0) { if (atoi(str) > 1800 && atoi(str) < 2000) { char text [10] = " "; strcpy(text, str); char * string = strtok(text, "-"); string = strtok(NULL, "-"); if (atoi(string) > 0 && atoi (string) < 32) { string = strtok (NULL, "-"); if (atoi(string) > 0 && atoi (string) < 13) { musicians_arr [musIndex].birthdate = http_request_getArg(req, "birthdate"); str = http_request_getArg(req, "year"); if (strlen(str) > 0 && atoi(str) > 1850 && atoi (str) < 2016) { musicians_arr[musIndex].year = atoi(str); str = http_request_getArg (req, "rating"); if (strlen(str) > 0 && atof (str) >= 0.0 && atof (str) <= 5.0) { musicians_arr[musIndex].rating = atof (str); str = http_request_getArg(req, "style"); if (strlen(str) > 0 && strlen (str) < 20) { musicians_arr[musIndex].band.style = str; str = http_request_getArg(req, "role"); if (strlen(str) > 0 && strlen (str) < 20) { musicians_arr[musIndex].band.role = str; Text = musician_toJSON(&musicians_arr); printf("New musician:\n%s\n", Text); sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(Text), Text); free(Text); } else { error_t_add_err(err, NULL, "Wrong role"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong style"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong rating"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong year of death"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong month of birthdate"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong day of birthdate"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong year of birthdate"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong birthdate "); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong surname"); server_sendJson(client, &err); } } else { error_t_add_err(err, NULL, "Wrong name"); server_sendJson(client, &err); } } else { if (strcmp(req->method, "DELETE") == 0) { musicians_arr[musIndex] = musician_empty(); musicians_arr[musIndex].id = musIndex; if (musicians_arr[musIndex].year == 0) error_t_add_err(err, NULL, "Deleted successfully, no errors"); else error_t_add_err (err, NULL, "Deleted unsuccessfully, Error"); server_sendJson(client, &err); } else { error_t_add_err(err, NULL, "Wrong method"); server_sendJson(client, &err); } } socket_write_string(client, strbuf); socket_close(client); }
void server_pensionersHtml(socket_t * client, resource_t * lt, http_request_t * req) { char buf[10000] = ""; if(strcmp(req->method, "GET") == 0) { char text[4000] = ""; for(int i = 0; i < resource_getCnt(lt); i++) { char pageText[300] = ""; sprintf(pageText, "<a href=\"http://127.0.0.1:5000/pensioners/%i\">%s %s<br></a>\n", pensioner_getID(resource_getPens(lt, i)), pensioner_getName(resource_getPens(lt, i)), pensioner_getSurname(resource_getPens(lt, i))); strcat(text, pageText); } char * pageText = "<a href=\"http://127.0.0.1:5000/new-pensioner\"><br>New pensioner</a>"; strcat(text, pageText); char * textHTML = textToBuf_HTML(text); strcat(buf, textHTML); free(textHTML); } else if(strcmp(req->method, "POST") == 0) { char * id = (char *) http_request_getArg(req, "id"); char * name = (char *)http_request_getArg(req, "name"); char * surname = (char *)http_request_getArg(req, "surname"); char * birthday = (char *)http_request_getArg(req, "birthday"); char * pension = (char *)http_request_getArg(req, "pension"); char * experience = (char *)http_request_getArg(req, "experience"); int ch = check(id, name, surname, birthday, pension, experience, lt); char * message; switch(ch) { case 1: { pensioner_t * pens = pensioner_new(); pensioner_set(pens, atoi(id), birthday, name, surname, atof(pension), atoi(experience)); resource_add(lt, pens); message = "<h3>Success</h3>" "<a href=\"http://127.0.0.1:5000/pensioners\"><br>Back to the list.</a>"; break; } case 2: { message = "<h3 style=\"color:green\">This index is already occupied.</h3>"; break; } case 3: { message = "<h3 style=\"color:green\">Wrong index. Number must be > 0.</h3>"; break; } case 4: { message = "<h3 style=\"color:green\">Wrong data format.</h3>"; break; } default: message = "<h3 style=\"color:green\">Wrong input or empty field.</h3>"; break; } char * textHtml = textToBuf_HTML(message); strcat(buf, textHtml); free(textHtml); } socket_write_string(client, buf); socket_close(client); }
void server_teacherId(socket_t * client, http_request_t * req, int index) { char strbuf[10000]; if (strcmp(req->method, "GET") == 0) { for(int i=0;i<5;i++) { printStruct(&teachers[index]); printf("\n"); } char * teachJSON = teacher_parseToJSON(&teachers[index]); sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(teachJSON), teachJSON); free(teachJSON); } else if (strcmp(req->method, "POST") == 0) { char * str = http_request_getArg(req, "firstName"); if(str==NULL) { server_error(client); return; } if (str != NULL && strlen(str) < 25) { strcpy(teachers[index].firstName,str); } str = http_request_getArg(req, "lastName"); if (str != NULL && strlen(str) < 25) { strcpy(teachers[index].lastName,str); } str = http_request_getArg(req, "id"); if (str != NULL && isdigit(str[0]) != 0 && strlen(str) < 7) { teachers[index].id = atof(str); } str = http_request_getArg(req, "lessonName"); if (str != NULL && strlen(str) < 25) { strcpy(teachers[index].teacher_lesson.lessonName,str); } str = http_request_getArg(req, "average"); if (str != NULL) { float p = atof(str); teachers[index].teacher_lesson.average = p; } str = http_request_getArg(req, "birthTown"); if (str != NULL && strlen(str) < 25) { strcpy(teachers[index].idCard.birthTown,str); } str = http_request_getArg(req, "birthday"); int size = 10; if(str!=NULL) size = strlen(str); const char tmp[size]; if(str!=NULL) strcpy(tmp,str); if (str != NULL) { if (str[5] != NULL && str[4] == '-' && atoi(str) > 1900 && atoi(str) < 2016) { str = strtok(str, "-"); str = strtok(NULL, "-"); if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 12)) { str = strtok(NULL, "-"); if (str != NULL && (atoi(str) >= 1 && atoi(str) <= 31)) { str = http_request_getArg(req, "birthday"); teachers[index].idCard.birthday.tm_year = atoi(str); strcpy(str,tmp); str = strtok(str, "-"); str = strtok(NULL, "-"); teachers[index].idCard.birthday.tm_mon = atoi(str); str = strtok(NULL, "-"); teachers[index].idCard.birthday.tm_mday = atoi(str); } } } } printStruct(&teachers[index]); char * tJSON = teacher_parseToJSON(&teachers[index]); printf("New student with id %i , type /teachers/%i to get full info", teachers[index].id,teachers[index].id , tJSON); sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(tJSON), tJSON); free(tJSON); } else if (strcmp(req->method, "DELETE") == 0) { teacher_init(&teachers[index]); for(int i=0;i<5;i++) { printStruct(&teachers[i]); } char * delTeachJSON = teacher_parseToJSON(&teachers[index]); printf("Deleted student (%i-th one):\n%s\n", index, delTeachJSON); char * delText = "Student deleted successfully!"; sprintf(strbuf, "HTTP/1.1 200 OK\n" "Content-Type: application/json\n" "Content-Length: %zu\n" "Connection: keep-alive\n" "\n%s", strlen(delText), delText); free(delTeachJSON); } else { char * errText = "Invalid command!"; sprintf(strbuf, "HTTP/1.1 404 \n" "Content-Type: text/html\n" "Content-Length: %zu\n" "\n%s", strlen(errText), errText); } socket_write_string(client, strbuf); socket_close(client); }
void http_request_chooseMethod(http_request_t req, socket_t * clientSocket, pupils_t pupils){ if(strcmp(req.uri, "/") == 0) { char msg[MSG_LENGTH]; sprintf(msg, "<message>\n" "\t<status>ok</status>\n" "\t<text>HELLO, USER!</text>\n" "</message>\n"); socket_write_string(clientSocket, msg); } else if (strcmp(req.uri, "/pupils/") == 0) { char msg[MSG_LENGTH]; sprintf(msg, "<message>\n" "\t<status>error</status>\n" "\t<text>Not Found</text>\n" "</message>\n"); socket_write_string(clientSocket, msg); } else if (strcmp(req.uri, "/pupils") > 0) { int id = atoi(strtok(req.uri, "/pupils")); if(pupils_checkID(pupils, id) == 0) { if(strcmp(req.method, "GET") == 0) { if(pupils_pupilByIdToMessage(pupils, id) != 0) { char result[BUFFER_LENGTH]; sprintf(result, "HTTP/1.1 200 OK\n" "Content-length: %zu\n" "Content-type: application/xml\n" "\n" "%s\0", strlen(pupils_pupilByIdToMessage(pupils, id)), pupils_pupilByIdToMessage(pupils, id)); socket_write_string(clientSocket, result); } } else if(strcmp(req.method, "POST") == 0) { char result[MSG_LENGTH]; const char * stName = http_request_getArg(&req, "name"); const char * stSurname = http_request_getArg(&req, "surname"); const char * stBirthdate = http_request_getArg(&req, "birthdate"); const char * stNameForm = http_request_getArg(&req, "nameForm"); int stNumberInList = atoi(http_request_getArg(&req, "numberInList")); int stId = atoi(http_request_getArg(&req, "id")); double stScore = atof(http_request_getArg(&req, "score")); if(strlen(stName) == 0 || strlen(stName) > WORD_LENGTH){ sprintf(result, "<message>\n" "\t<status>error</status>\n" "\t<text>Invalid name</text>\n" "</message>\n"); socket_write_string(clientSocket, result); return 1; } else if(strlen(stSurname) == 0 || strlen(stSurname) > WORD_LENGTH){ sprintf(result, "<message>\n" "\t<status>error</status>\n" "\t<text>Invalid surname</text>\n" "</message>\n"); socket_write_string(clientSocket, result); return 1; } else if(strlen(stBirthdate) == 0 || strlen(stBirthdate) > WORD_LENGTH){ sprintf(result, "<message>\n" "\t<status>error</status>\n" "\t<text>Invalid birthdate</text>\n" "</message>\n"); socket_write_string(clientSocket, result); return 1; } else if(strlen(stNameForm) == 0 || strlen(stNameForm) > WORD_LENGTH){ sprintf(result, "<message>\n" "\t<status>error</status>\n" "\t<text>Invalid name form</text>\n" "</message>\n"); socket_write_string(clientSocket, result); return 1; } else if(stId < 0 || pupils_checkID(pupils, stId) == 0){ sprintf(result, "<message>\n" "\t<status>error</status>\n" "\t<text>Invalid id</text>\n" "</message>\n"); socket_write_string(clientSocket, result); return 1; } else if(stScore < 0 || stScore > 12.0){ sprintf(result, "<message>\n" "\t<status>error</status>\n" "\t<text>Invalid score</text>\n" "</message>\n"); socket_write_string(clientSocket, result); return 1; } else if(stNumberInList < 0 || stNumberInList > 50){ sprintf(result, "<message>\n" "\t<status>error</status>\n" "\t<text>Invalid number in list</text>\n" "</message>\n"); socket_write_string(clientSocket, result); return 1; } else { pupils_changePupil(pupils, id, stId, stName, stSurname, stBirthdate, stScore, stNumberInList, stNameForm); printf("New:\n" "<pupil>\n" "\t<id>%i</id>\n" "\t<name>%s</name>\n" "\t<surname>%s</surname>\n" "\t<birthdate>%s</birthdate>\n" "\t<form nameForm=\"%s\">\n" "\t\t<numberInList>%i</numberInList>\n" "\t</form>\n" "\t<score>%.2f</score>\n" "</pupil>\n\n", stId, stName, stSurname, stBirthdate, stNameForm, stNumberInList, stScore); char res[MSG_LENGTH]; sprintf(res, "<pupil>\n" "\t<id>%i</id>\n" "\t<name>%s</name>\n" "\t<surname>%s</surname>\n" "\t<birthdate>%s</birthdate>\n" "\t<form nameForm=\"%s\">\n" "\t\t<numberInList>%i</numberInList>\n" "\t</form>\n" "\t<score>%.2f</score>\n" "</pupil>\n\n", stId, stName, stSurname, stBirthdate, stNameForm, stNumberInList, stScore); sprintf(result, "HTTP/1.1 200 OK\n" "Content-length: %zu\n" "Content-type: application/xml\n" "\n" "%s\0", strlen(res), res); socket_write_string(clientSocket, result); } } else if(strcmp(req.method, "DELETE") == 0) { pupils_deletePupil(pupils, id); char result_msg[MSG_LENGTH]; sprintf(result_msg, "<message>\n" "\t<status>ok</status>\n" "\t<text>Pupil (id%i) has been deleted</text>\n" "</message>\n", id); socket_write_string(clientSocket, result_msg); } } else { char result_msg[MSG_LENGTH]; sprintf(result_msg, "<message>\n" "\t<status>error</status>\n" "\t<text>Pupil (id%i) not found</text>\n" "</message>\n", id); socket_write_string(clientSocket, result_msg); } } else if (strcmp(req.uri, "/pupils") == 0) { if(strcmp(req.method, "GET") == 0) { char result[10000]; sprintf(result, "HTTP/1.1 200 OK\n" "Content-length: %zu\n" "Content-type: application/xml\n" "\n" "%s\0", strlen(pupils_allPupilsToMessage(pupils)), pupils_allPupilsToMessage(pupils)); socket_write_string(clientSocket, result); } else { char result_msg[MSG_LENGTH]; sprintf(result_msg, "<message>\n" "\t<status>error</status>\n" "\t<text>NOT ALLOWED</text>\n" "</message>\n"); socket_write_string(clientSocket, result_msg); } } else { char result_msg[MSG_LENGTH]; sprintf(result_msg, "<message>\n" "\t<status>error</status>\n" "\t<text>Not Found</text>\n" "</message>\n"); socket_write_string(clientSocket, result_msg); } }
void server_POST(http_request_t req, socket_t * clientSocket, sqlite3 * db) { const char * name = http_request_getArg(&req, "name"); const char * birthdate = http_request_getArg(&req, "birthdate"); const char * years = http_request_getArg(&req, "years"); const char * rate = http_request_getArg(&req, "rate"); const char * subjects = http_request_getArg(&req, "subjects"); if(name == NULL || birthdate == NULL || years == NULL || rate == NULL || subjects == NULL) { socket_write_string(clientSocket,"<body> POST argument/arguments is/are empty<br>" "<a href=""/Teacher/"">To Teachers</a></body>"); return; } char buf[1000] = ""; int id; int check = 0; int dot = 0; for(int i = 0; i < strlen(rate); i++) if(!isdigit(rate[i])) { if(rate[i]=='.'||dot==0) dot++; else check++; } for(int i = 0; i < strlen(years); i++) if(!isdigit(years[i])) check++; for(int i = 0; i < strlen(subjects); i++) if(!isdigit(subjects[i])) check++; for(int i = 0; i < 4; i++) if(!isdigit(birthdate[i])) check++; if(birthdate[4]!='-') check++; for(int i = 5; i < 7; i++) if(!isdigit(birthdate[i])) check++; if(birthdate[7] != '-') check++; for(int i = 8; i < strlen(birthdate); i++) if(!isdigit(birthdate[i])) check++; if(atoi(birthdate+5) > 12) check++; if(dot > 1 || dot < 0) { socket_write_string(clientSocket,"<body>Invalid POST argument<br>" "<a href=""/Teacher/"">To Teachers</a></body>"); return; } if(check == 0) { db_insertTeacher(db, name, atof(rate), atoi(subjects), atoi(years), birthdate); socket_write_string(clientSocket, "<body>Post success<br>" "<a href=\"/Teacher/\">To Teachers</a></body>"); } else socket_write_string(clientSocket,"<body>Invalid POST argument<br>" "<a href=\"/Teacher/\">To Teachers</a></body>"); }
void server_mastersHtml(socket_t * client, http_request_t * req, db_t * db) { char buffer[10240] = ""; if (strcmp(req->method, "GET") == 0) { char pageText[10240] = ""; for(int i = 0; i < db_count(db); i++) { master_t * master = db_getDataById(db, i); char text[100] = ""; sprintf(text, "<a href=\"http://127.0.0.1:5000/ScrumMasters/%i\">%s %s<br></a>\n", i + 1, master_getSurname(master), master_getName(master)); strcat(pageText, text); master_free(master); } char * text = "<a href=\"http://127.0.0.1:5000/new-ScrumMaster\"><br>New Scrum Master</a>"; strcat(pageText, text); char * textHTML = textToHTML(pageText); strcat(buffer, textHTML); free(textHTML); } else if (strcmp(req->method, "POST") == 0) { char * name = (char *)http_request_getArg(req, "name"); char * surname = (char *)http_request_getArg(req, "surname"); char * countK = (char *)http_request_getArg(req, "countK"); char * countP = (char *)http_request_getArg(req, "countP"); if(verification(name, surname, countK, countP) == 1) { db_insertData(db, name, surname, atoi(countK), atoi(countP)); char pageText[1024] = ""; sprintf(pageText, "<p>" "Name: %s<br>" "Surname: %s<br>" "CountK: %i<br>" "CountP: %i<br>" "</p>", name, surname, atoi(countK), atoi(countP)); char * textHTML = textToHTML(pageText); strcat(buffer, textHTML); free(textHTML); } else { char * pageText = "<h3>Wrong input</h3>"; char * textHTML = textToHTML(pageText); strcat(buffer, textHTML); free(textHTML); } } socket_write_string(client, buffer); socket_close(client); }
void server_masters(socket_t * client, http_request_t * req, db_t * db) { char buffer[10240] = ""; if (strcmp(req->method, "GET") == 0) { list_t * masters = list_new(); char * countK = (char *)http_request_getArg(req, "countK"); char * countP = (char *)http_request_getArg(req, "countP"); if(countK != NULL && countP != NULL) { db_filtration(db, masters, atoi(countK), atoi(countP)); } else { db_parse(db, masters); } cJSON * jPageText = cJSON_CreateArray(); for(int i = 0; i < list_size(masters); i++) { master_t * sm = list_get(masters, i); cJSON * jText = cJSON_CreateObject(); cJSON_AddItemToObject(jText, "Name", cJSON_CreateString(master_getName(sm))); cJSON_AddItemToObject(jText, "Surname", cJSON_CreateString(master_getSurname(sm))); cJSON_AddItemToObject(jText, "CountK", cJSON_CreateNumber(master_getCountK(sm))); cJSON_AddItemToObject(jText, "CountP", cJSON_CreateNumber(master_getCountP(sm))); cJSON_AddItemToArray(jPageText, jText); } char * pageText = cJSON_Print(jPageText); list_free(masters); char * textJSON = textToJSON(pageText); strcat(buffer, textJSON); free(textJSON); } else if (strcmp(req->method, "POST") == 0) { char * name = (char *)http_request_getArg(req, "name"); char * surname = (char *)http_request_getArg(req, "surname"); char * countK = (char *)http_request_getArg(req, "countK"); char * countP = (char *)http_request_getArg(req, "countP"); if(verification(name, surname, countK, countP) == 1) { db_insertData(db, name, surname, atoi(countK), atoi(countP)); cJSON * jText = cJSON_CreateObject(); cJSON_AddItemToObject(jText, "Name", cJSON_CreateString(name)); cJSON_AddItemToObject(jText, "Surname", cJSON_CreateString(surname)); cJSON_AddItemToObject(jText, "CountK", cJSON_CreateNumber(atoi(countK))); cJSON_AddItemToObject(jText, "CountP", cJSON_CreateNumber(atoi(countP))); char * pageText = cJSON_Print(jText); char * textJSON = textToJSON(pageText); strcat(buffer, textJSON); free(textJSON); } else { cJSON * jText = cJSON_CreateObject(); cJSON_AddItemToObject(jText, "Error", cJSON_CreateString("Wrong input")); char * pageText = cJSON_Print(jText); char * textJSON = textToJSON(pageText); strcat(buffer, textJSON); free(textJSON); } } socket_write_string(client, buffer); socket_close(client); }