Added SavedData Class
under /src/data/ passed all my testing! commiting only this class with no changes within the rest of the project!
This commit is contained in:
parent
5019f5d650
commit
320f0cc1d1
3 changed files with 257 additions and 1 deletions
|
@ -22,7 +22,8 @@ SOURCES += main/coursestablemanager.cpp \
|
|||
src/grades/GradePage.cpp \
|
||||
src/grades/Page.cpp \
|
||||
src/jce/jcedate.cpp \
|
||||
src/jce/jcelogin.cpp
|
||||
src/jce/jcelogin.cpp \
|
||||
src/data/savedata.cpp
|
||||
|
||||
|
||||
|
||||
|
@ -37,6 +38,7 @@ HEADERS += main/coursestablemanager.h \
|
|||
src/jce/jcedate.h \
|
||||
src/jce/jcelogin.h \
|
||||
src/jce/jceLoginHtmlScripts.h \
|
||||
src/data/savedata.h
|
||||
|
||||
|
||||
|
||||
|
|
200
src/data/savedata.cpp
Normal file
200
src/data/savedata.cpp
Normal file
|
@ -0,0 +1,200 @@
|
|||
#include "savedata.h"
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Checks the status tag in the file
|
||||
* @return boolean the status
|
||||
*/
|
||||
bool SaveData::isSaved()
|
||||
{
|
||||
QString status;
|
||||
QFile* file = new QFile(FILE_NAME);
|
||||
/* Opening file for read */
|
||||
if(file->open(QIODevice::ReadOnly|QIODevice::Text))
|
||||
{
|
||||
status = getValViaTag("status", file);
|
||||
if(status == "true")
|
||||
{
|
||||
file->close(); //close & return
|
||||
return true;
|
||||
}
|
||||
return false; //close & return
|
||||
file->close();
|
||||
}
|
||||
/* If Faild to open */
|
||||
std::cout << "Faild To Accsess file: " << FILE_NAME << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief This Function will modify the file, and save the data.
|
||||
* @param username - QString
|
||||
* @param password - QString
|
||||
* @return true if saved - false if error
|
||||
*/
|
||||
bool SaveData::save(QString username, QString password)
|
||||
{
|
||||
std::cout << "Trying to save data..." << std::endl;
|
||||
QFile file(FILE_NAME);
|
||||
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
|
||||
return false; /* IO Error! */
|
||||
QTextStream output(&file);
|
||||
QString hash_pass = hashPassword(password);
|
||||
output << "[status]true[/]\n[username]"<<username<<"[/]\n"<<"[password]"<<hash_pass<<"[/]"; //Un Hashed Password in string!
|
||||
file.close();
|
||||
std::cout << "Saved!" << std::endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Deletes the data from file, and sets status tag to false.
|
||||
* @return true if success
|
||||
*/
|
||||
bool SaveData::deleteData()
|
||||
{
|
||||
QFile file(FILE_NAME);
|
||||
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
|
||||
return false; /* IO Error! */
|
||||
QTextStream output(&file);
|
||||
output << DEFAULT_DATA_EMPTY;
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief username getter
|
||||
* @return QString - username
|
||||
*/
|
||||
QString SaveData::getUsername()
|
||||
{
|
||||
QString username = "";
|
||||
QFile* file = new QFile(FILE_NAME);
|
||||
|
||||
/* Opening file for read */
|
||||
if(file->open(QIODevice::ReadOnly|QIODevice::Text))
|
||||
username = getValViaTag("username", file);
|
||||
file->close();
|
||||
return username;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief getter for password
|
||||
* @return QString - password
|
||||
*/
|
||||
QString SaveData::getPassword()
|
||||
{
|
||||
QString pass = "";
|
||||
QFile* file = new QFile(FILE_NAME);
|
||||
/* Opening file for read */
|
||||
if(file->open(QIODevice::ReadOnly|QIODevice::Text))
|
||||
pass = getValViaTag("password", file);
|
||||
file->close();
|
||||
pass = deHashPasword(pass);
|
||||
return pass;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This is A functions that will init the tags file.
|
||||
* if it exist - do nothing
|
||||
* if there is no file, it will create it and run the deleteData function
|
||||
* so tags will be set.
|
||||
*/
|
||||
void SaveData::init()
|
||||
{
|
||||
QFile file(FILE_NAME);
|
||||
if(!file.exists())
|
||||
{
|
||||
file.open(QIODevice::ReadWrite | QIODevice::Text);
|
||||
file.close();
|
||||
deleteData();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function will return the vale of a given tag name.
|
||||
* NOTE: valid tag names are : "status", "username", "password"
|
||||
* if tag is invalid - will return "" - an empty QString!
|
||||
* @param tag - QString, the tag name
|
||||
* @param file - a QFile pointer
|
||||
* @return QString - the value in tag
|
||||
* NOTE: if NULL value, or an invalid tag name -> return "" (empty QString!)
|
||||
*/
|
||||
QString SaveData::getValViaTag(QString tag, QFile* file)
|
||||
{
|
||||
QString val, line , tmpTag;
|
||||
QTextStream textStream( file);
|
||||
while((line = textStream.readLine()) != NULL)
|
||||
{
|
||||
std::cout << "DEBUG: line => " << line.toStdString() << std::endl;
|
||||
for(int i = 0 ; i< line.length() ;++i)
|
||||
{
|
||||
if(line[i] == '[' && line[i+1] != '/') //get open tag at begining of line and not end of tag ("[/")
|
||||
{
|
||||
i++;
|
||||
tmpTag = line.mid(i, tag.length());
|
||||
if(tmpTag == tag)
|
||||
{
|
||||
i+= tag.length()+1; // i is now right after '['
|
||||
int j = i;
|
||||
while(line[j] != '[')// put j at the end of the value
|
||||
j++;
|
||||
/* Then... the value is :*/
|
||||
val = line.mid(i, j-i);
|
||||
std::cout << "DEBUG: ["<<tag.toStdString()<<"]"<<val.toStdString()<<"[/]"<<std::endl;
|
||||
return val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ""; //this will be as NULL
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function will provide the user the most basic security of the stored password.
|
||||
* it is NOT an encryption! it will store every char of the password as ascii encoded,
|
||||
* separated by "-" for the deHsh func.
|
||||
* @param pass - a QString to "hash"
|
||||
* @return QString - The "hashed" password
|
||||
*/
|
||||
QString SaveData::hashPassword(QString pass)
|
||||
{
|
||||
QString hash="";
|
||||
int code;
|
||||
for(QChar c : pass)
|
||||
{
|
||||
code = (int)c.toLatin1();
|
||||
hash.append(QString::number(code));
|
||||
hash.append("-");
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief This function will "dehash" the "hashed" password.
|
||||
* uses standard c string.h strtok with the "-" as the choping points.
|
||||
* builds a QString from the ascii.
|
||||
* @param pass - The hashed password
|
||||
* @return QString - password uncoded
|
||||
*/
|
||||
QString SaveData::deHashPasword(QString pass)
|
||||
{
|
||||
char* cpyPass = strdup(pass.toStdString().c_str());
|
||||
char* tok;
|
||||
char* ch;
|
||||
int val;
|
||||
QString password;
|
||||
tok = strtok(cpyPass,"-");
|
||||
while (tok != NULL)
|
||||
{
|
||||
ch = tok;
|
||||
val = atoi(ch);
|
||||
password.append(val);
|
||||
tok = strtok(NULL, "-");
|
||||
}
|
||||
return password;
|
||||
}
|
54
src/data/savedata.h
Normal file
54
src/data/savedata.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
#ifndef SAVEDATA_H
|
||||
#define SAVEDATA_H
|
||||
|
||||
/**
|
||||
* SaveData Class
|
||||
* --------------------------------------
|
||||
*
|
||||
* all functions in this class are static!
|
||||
* no need to create an object!
|
||||
*
|
||||
* provides all the needed functions
|
||||
* for saving user data for JCE login.
|
||||
*
|
||||
* the class will enteract with a file formated by tags for storing the valus.
|
||||
* the file format is as sutch:
|
||||
*
|
||||
* [status]Status Value[/]
|
||||
* [username]usernaem vale[/]
|
||||
* [password]hashed(not really) password vale[/]
|
||||
*
|
||||
* the class will create a file if not exists by calling Save Data::init() function.
|
||||
*
|
||||
* for more info about functions - see implantation
|
||||
*/
|
||||
|
||||
/* QT libs */
|
||||
#include <QString>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
|
||||
/* C/C++ libs */
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <iostream>
|
||||
|
||||
#define FILE_NAME "JAC_DB.dat"
|
||||
#define DEFAULT_DATA_EMPTY "[status]false[/]\n[username][/]\n[password][/]"
|
||||
|
||||
class SaveData
|
||||
{
|
||||
public:
|
||||
bool static isSaved();
|
||||
bool static save(QString username, QString password);
|
||||
bool static deleteData();
|
||||
QString static getUsername();
|
||||
QString static getPassword();
|
||||
void static init();
|
||||
private:
|
||||
QString static getValViaTag(QString tag, QFile *file);
|
||||
QString static hashPassword(QString pass);
|
||||
QString static deHashPasword(QString pass);
|
||||
};
|
||||
|
||||
#endif // SAVEDATA_H
|
Loading…
Reference in a new issue