Form validator initial implementation.

This commit is contained in:
Relintai 2021-08-20 15:54:12 +02:00
parent 4228448fc1
commit cd59ae4860
2 changed files with 102 additions and 35 deletions

View File

@ -1 +1,75 @@
#include "form_validator.h"
#include "form_validator.h"
#include "core/http/request.h"
//FormFieldEntry
bool FormFieldEntry::validate(Request *request, const std::string &data, std::vector<std::string> *errors) {
return true;
}
FormFieldEntry::FormFieldEntry() {
}
FormFieldEntry::~FormFieldEntry() {
}
//FormField
void FormField::add_entry(FormFieldEntry *field) {
fields.push_back(field);
}
bool FormField::validate(Request *request, std::vector<std::string> *errors) {
std::string param = request->get_parameter(name);
bool valid = true;
for (int i = 0; i < fields.size(); ++i) {
if (!fields[i]->validate(request, param, errors)) {
valid = false;
}
}
return valid;
}
FormField::FormField() {
}
FormField::~FormField() {
for (int i = 0; i < fields.size(); ++i) {
delete fields[i];
}
fields.clear();
}
//FormValidator
bool FormValidator::validate(Request *request, std::vector<std::string> *errors) {
bool valid = true;
for (int i = 0; i < fields.size(); ++i) {
if (!fields[i]->validate(request, errors)) {
valid = false;
}
}
return valid;
}
void FormValidator::add_field(FormField *field) {
fields.push_back(field);
}
FormValidator::FormValidator() {
}
FormValidator::~FormValidator() {
for (int i = 0; i < fields.size(); ++i) {
delete fields[i];
}
fields.clear();
}

View File

@ -7,45 +7,38 @@
class Request;
//This might be converted to a form validator
class FormFieldEntry {
public:
virtual bool validate(Request *request, const std::string &data, std::vector<std::string> *errors);
FormFieldEntry();
virtual ~FormFieldEntry();
};
class FormField {
public:
std::string name;
std::string label;
std::map<std::string, std::string> attribues;
virtual std::string render();
virtual bool validate(Request *request, std::vector<std::string> *errors);
FormField();
virtual ~FormField();
};
class InputFormField : public FormField {
std::string render();
};
class InputTextFormField : public InputFormField {
std::string render();
};
class InputPasswordFormField : public InputFormField {
std::string render();
};
class Form {
public:
std::string name;
std::map<std::string, std::string> attribues;
void add_entry(FormFieldEntry *field);
bool validate(Request *request, std::vector<std::string> *errors);
FormField();
virtual ~FormField();
std::vector<FormFieldEntry *> fields;
};
class FormValidator {
public:
bool validate(Request *request, std::vector<std::string> *errors = nullptr);
void add_field(FormField *field);
FormValidator();
virtual ~FormValidator();
std::vector<FormField *> fields;
//call Theme->render(); in it, and that will go though all attribs and call their renders
virtual std::string render();
Form();
virtual ~Form();
};
#endif