Skip to content

Commit

Permalink
we got a tiny menu which is helpful for the rest of project. i also a…
Browse files Browse the repository at this point in the history
…dded the link to the schedule. now we need to make it clean and pretty such as the grade page
  • Loading branch information
liranbg committed Mar 27, 2014
1 parent 084358d commit 06c4c21
Show file tree
Hide file tree
Showing 5 changed files with 194 additions and 92 deletions.
13 changes: 8 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# make rebuild clean and remake

# compiler
CC=g++
CC = g++

# compile arguments
CFLAGS = -Wall -g -fexceptions -std=c++11 -D_REENTRANT -pthread
Expand All @@ -18,7 +18,7 @@ LDFLAGS = -g -std=c++11
LIBS = -lcrypto -lssl

#our source files
SOURCES=$(wildcard *.cpp)
SOURCES = $(wildcard *.cpp)

# a macro to define the objects from sources
BUILD_DIR := build
Expand All @@ -32,8 +32,9 @@ EXECUTABLE=jce
all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJC)
@echo "Building target" $@ "..."
@echo "Building target" $@
@$(CC) $(LDFLAGS) -o $@ $(OBJC) $(LIBS)
@echo "Done."

# a rule for generating object files given their c files
#.cpp.o: /$(OBJCDIR)
Expand All @@ -42,13 +43,15 @@ ${BUILD_DIR}/%.o: %.cpp
@$(CC) $(CFLAGS) -c $< -o $@

clean:
@echo "Ceaning up *.o Files..."
@echo "Ceaning up *.o Files"
@rm -rf ${BUILD_DIR}
@echo "Done."

bclean:
@echo "Ceaning all"
@rm -rf $(EXECUTABLE) ${BUILD_DIR}
@echo "Done."

rebuild: clean all
rebuild: bclean all


47 changes: 43 additions & 4 deletions jce.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,51 @@
#include "jce.h"

jce::jce() : userAcc()
jce::jce() : userAcc(),jDates()
{
handler = new jceHandler(&userAcc);
handler = new jceHandler(&userAcc,&jDates);

}

void jce::start()
{
handler->start();
}
if (handler->start())
{
int ch;
do
{
system("clear");
printf("\n----------------jce API alpha----------------\n");
printf("\tPlease choose as following:\n");
printf("\t\tShow grades: 1\n");
printf("\t\tShow scheduale: 2\n");
printf("\t\tChange dates: 3\n");
printf("\t\ttype q to quit ");
switch(ch)
{
case '1':
handler->requestMenu(jceHandler::GET_GRADES_BY_DATES);
printf("\npress enter to continue...");
getchar();
break;
case '2':
handler->requestMenu(jceHandler::GET_SCHEDULE);
printf("\npress enter to continue...");
getchar();
break;
case '3':
jDates.setDate();
break;

}
}while ((ch = getchar()) != 'q');

}
else
{
printf("\ncouldnt visit");
exit(1);
}

}


12 changes: 5 additions & 7 deletions jce.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,21 @@

#include "jceHandler.h"

enum jceOPTIONS
{
GET_GRADES_BY_DATES,
GET_SCHEDULE
};

class jce
{

public:
jce();
~jce() {}
~jce() { free(handler); }
void start();


private:
jceHandler* handler;
user userAcc;
jceDates jDates;
jceHandler* handler;

};

#endif
170 changes: 112 additions & 58 deletions jceHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,57 @@ template <typename T>
std::string to_string(T value); //simple method to convert types into string.


jceHandler::jceHandler(user* const a) : jceUser(a)
jceHandler::jceHandler(user* const us,jceDates* const jd) : jceUser(us), jDates(jd)
{
recieverPage = new std::string("");
JceConnector = new sslsocket(dst_host, dst_port); //open a new ssl connection to jce
}
void jceHandler::start()
bool jceHandler::start()
{
if (!JceConnector->isCon())
printErrorANDabort(ERROR_ON_OPEN_SOCKET);
checkConnection();

makeFirstVisit();

makeSecondVisit();

//if succeed on all visiting, that means everything is clear.
//
//what we need to do is make the tests more clean
return true;
}
bool jceHandler::requestMenu(jceOptions t)
{
checkConnection();

switch (t)
{
case GET_GRADES_BY_DATES:
getGraders();
break;
case GET_SCHEDULE:
getSchedule();
break;
default:
return true;
}
return false;

}
void jceHandler::makeFirstVisit()
{
if (JceConnector->send(makeRequest(getFirstValidationStep())))
{
puts ("First login validation step");
if (!JceConnector->recieve(*recieverPage))
printErrorANDabort(ERROR_ON_GETTING_INFO);
printErrorANDabort(jceHandler::ERROR_ON_GETTING_INFO);

if (!checkValidation(*recieverPage))
printErrorANDabort(ERROR_ON_VALIDATION);
printErrorANDabort(jceHandler::ERROR_ON_VALIDATION);

makeSecondVisit();
return;
}
else
printErrorANDabort(ERROR_ON_SEND_REQUEST);
printErrorANDabort(jceHandler::ERROR_ON_SEND_REQUEST);

}
void jceHandler::makeSecondVisit()
Expand All @@ -39,49 +62,44 @@ void jceHandler::makeSecondVisit()
if ((JceConnector->send(makeRequest(getSecondValidationStep()))))
{
if (!(JceConnector->recieve(*recieverPage)))
printErrorANDabort(ERROR_ON_GETTING_INFO);
printErrorANDabort(jceHandler::ERROR_ON_GETTING_INFO);

makeFurtherRequests();
return;
}
else
printErrorANDabort(ERROR_ON_SEND_REQUEST);
printErrorANDabort(jceHandler::ERROR_ON_SEND_REQUEST);
}
bool jceHandler::checkValidation(std::string &html)

void jceHandler::checkConnection()
{
//finds the hashed password
std::size_t hasspass_position1 = recieverPage->find("-A,-N");
hasspass_position1 += 5;
std::size_t hasspass_position2 = recieverPage->find(",-A,-A", hasspass_position1);
if ((hasspass_position2 != std::string::npos) && (hasspass_position1 != std::string::npos))
{
std::string hasspass = recieverPage->substr(hasspass_position1,hasspass_position2-hasspass_position1);
jceUser->setHashedPassword(hasspass);
}
//finds the user id
std::size_t id_position1 = recieverPage->find("e=\"-N", 0);
id_position1 += 5;
std::size_t id_position2 = recieverPage->find(",-A", id_position1);
if ((id_position2 != std::string::npos) && (id_position1 != std::string::npos))
if (!JceConnector->isCon())
printErrorANDabort(jceHandler::ERROR_ON_OPEN_SOCKET);
}
void jceHandler::getSchedule()
{

puts("getting schedule");
if (!(JceConnector->send(makeRequest(getSchedulePath()))))
printErrorANDabort(jceHandler::ERROR_ON_SEND_REQUEST);
if (!(JceConnector->recieve(*recieverPage)))
{
std::string hassid = recieverPage->substr(id_position1,id_position2-id_position1);
jceUser->setUserID(hassid);
printErrorANDabort(jceHandler::ERROR_ON_GETTING_GRADES);
}
if (((jceUser->getUserID()).empty()) || ((jceUser->getHashedPassword()).empty()))
return false;

return true;
}

void jceHandler::makeFurtherRequests()
{

std::cout << *recieverPage;

}
void jceHandler::getGraders()
{
puts ("getting rates!");
if (!(JceConnector->send(makeRequest(getGradesPath("2013","0","2014","3"))))) //change it in GUI (select years, semesters)
printErrorANDabort(ERROR_ON_SEND_REQUEST);
if (!(JceConnector->send(makeRequest(getGradesPath()))))
printErrorANDabort(jceHandler::ERROR_ON_SEND_REQUEST);

if (!(JceConnector->recieve(*recieverPage)))
{
printErrorANDabort(ERROR_ON_GETTING_GRADES);
printErrorANDabort(jceHandler::ERROR_ON_GETTING_GRADES);
}

GradePage* gp = GradePage::createGradeClass(*recieverPage);
Expand All @@ -91,33 +109,27 @@ void jceHandler::makeFurtherRequests()
cout << "Your GPA is currantly: " << gp->getAvg() << endl;

}
std::string jceHandler::getFirstValidationStep()
{
std::string parameters = "?appname=BSHITA&prgname=LoginValidation&arguments=-N";
parameters += jceUser->getUsername();
parameters += ",-N";
parameters += jceUser->getPassword();
return parameters;
}
std::string jceHandler::getSecondValidationStep()

std::string jceHandler::getSchedulePath()
{
std::string parameters = "prgname=LoginValidtion1&Arguments=-N";
parameters += jceUser->getUserID();
parameters += ",-A,-N";
parameters += jceUser->getHashedPassword();
parameters += ",-A,-A";
return parameters;
std::string string = "PRGNAME=Bitsua_maarechet_shaot&ARGUMENTS=TZ,UNIQ,MisparSheilta,R1C1,R1C2&";
string += "TZ=" + jceUser->getUserID()+ "&";
string += "UNIQ=" + jceUser->getHashedPassword() + "&";
string += "MisparSheilta=3&";
string += "R1C1=" + jDates->getTYear() + "&";
string += "R1C2=" + jDates->getTSemester();
return string;

}
std::string jceHandler::getGradesPath(std::string fromyear, std::string fromsemester,
std::string toyear,std::string tosemester)
std::string jceHandler::getGradesPath()
{
std::string string = "PRGNAME=HADPASAT_MISMAHIM_LETALMID&ARGUMENTS=TZ,-N4,R1C2,R1C4,R1C1,R1C3,-A,-A,R1C5,-A,UNIQ&";
string += "TZ=" + jceUser->getUserID() + "&";
string += "UNIQ=" + jceUser->getHashedPassword() + "&";
string += "R1C2=" + fromyear + "&";
string += "R1C1=" + toyear + "&";
string += "R1C3=" + tosemester + "&";
string += "R1C4=" + fromsemester + "&";
string += "R1C2=" + jDates->getFYear() + "&";
string += "R1C1=" + jDates->getTYear() + "&";
string += "R1C3=" + jDates->getTSemester() + "&";
string += "R1C4=" + jDates->getFSemester() + "&";
string += "R1C5=0";
return string;
}
Expand All @@ -136,6 +148,48 @@ std::string jceHandler::makeRequest(std::string parameters)
msg += parameters;
return msg;
}
std::string jceHandler::getFirstValidationStep()
{
std::string parameters = "?appname=BSHITA&prgname=LoginValidation&arguments=-N";
parameters += jceUser->getUsername();
parameters += ",-N";
parameters += jceUser->getPassword();
return parameters;
}
std::string jceHandler::getSecondValidationStep()
{
std::string parameters = "prgname=LoginValidtion1&Arguments=-N";
parameters += jceUser->getUserID();
parameters += ",-A,-N";
parameters += jceUser->getHashedPassword();
parameters += ",-A,-A";
return parameters;
}
bool jceHandler::checkValidation(std::string &html)
{
//finds the hashed password
std::size_t hasspass_position1 = recieverPage->find("-A,-N");
hasspass_position1 += 5;
std::size_t hasspass_position2 = recieverPage->find(",-A,-A", hasspass_position1);
if ((hasspass_position2 != std::string::npos) && (hasspass_position1 != std::string::npos))
{
std::string hasspass = recieverPage->substr(hasspass_position1,hasspass_position2-hasspass_position1);
jceUser->setHashedPassword(hasspass);
}
//finds the user id
std::size_t id_position1 = recieverPage->find("e=\"-N", 0);
id_position1 += 5;
std::size_t id_position2 = recieverPage->find(",-A", id_position1);
if ((id_position2 != std::string::npos) && (id_position1 != std::string::npos))
{
std::string hassid = recieverPage->substr(id_position1,id_position2-id_position1);
jceUser->setUserID(hassid);
}
if (((jceUser->getUserID()).empty()) || ((jceUser->getHashedPassword()).empty()))
return false;

return true;
}
void jceHandler::printErrorANDabort(jceErrors t)
{
switch(t)
Expand Down
Loading

0 comments on commit 06c4c21

Please sign in to comment.