wow i might actually get to render the game soon
This commit is contained in:
parent
a9b9a78670
commit
14b6d91b84
7 changed files with 101 additions and 13 deletions
|
@ -379,8 +379,12 @@ TODO: MAKE THIS SECTION NOT LOOK LIKE SHIT
|
||||||
|
|
||||||
0x100: USERNAME TAKEN
|
0x100: USERNAME TAKEN
|
||||||
|
|
||||||
0x101: EMAIL TAKEN
|
0x101: USERNAME ILLEGAL
|
||||||
|
|
||||||
0x102: PASSWORD TOO WEAK
|
0x110: EMAIL TAKEN
|
||||||
|
|
||||||
|
0x111: EMAIL ILLEGAL
|
||||||
|
|
||||||
|
0x120: PASSWORD TOO WEAK
|
||||||
|
|
||||||
### Slave / Client
|
### Slave / Client
|
|
@ -136,3 +136,43 @@ std::string* sosc::str::tolower(std::string* str) {
|
||||||
std::transform(str->begin(), str->end(), str->begin(), ::tolower);
|
std::transform(str->begin(), str->end(), str->begin(), ::tolower);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool sosc::str::verify_email(const std::string& email) {
|
||||||
|
if(email.length() > 320)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
std::string::size_type at_loc;
|
||||||
|
if((at_loc = email.find('@')) == std::string::npos)
|
||||||
|
return false;
|
||||||
|
if(at_loc > 64)
|
||||||
|
return false;
|
||||||
|
if(email.find('.', at_loc) == std::string::npos)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for(std::string::size_type i = 0; i < at_loc; ++i) {
|
||||||
|
if(!(
|
||||||
|
(email[i] >= 'A' && email[i] <= 'Z') ||
|
||||||
|
(email[i] >= 'a' && email[i] <= 'z') ||
|
||||||
|
(email[i] >= '0' && email[i] <= '9') ||
|
||||||
|
(email[i] >= '!' && email[i] <= '/' &&
|
||||||
|
email[i] != '"' && email[i] != ',' &&
|
||||||
|
email[i] != '(' && email[i] != ')') ||
|
||||||
|
(email[i] >= '^' && email[i] <= '`') ||
|
||||||
|
(email[i] >= '{' && email[i] <= '~') ||
|
||||||
|
email[i] == '=' || email[i] == '?'
|
||||||
|
))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(std::string::size_type i = at_loc + 1; i < email.length(); ++i) {
|
||||||
|
if(!(
|
||||||
|
(email[i] >= 'A' && email[i] <= 'Z') ||
|
||||||
|
(email[i] >= 'a' && email[i] <= 'z') ||
|
||||||
|
(email[i] >= '0' && email[i] <= '9') ||
|
||||||
|
email[i] == '-' || email[i] == '.'
|
||||||
|
))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -44,6 +44,8 @@ bool contains(const std::string& haystack, const std::string& needle);
|
||||||
|
|
||||||
std::string tolower(std::string str);
|
std::string tolower(std::string str);
|
||||||
std::string* tolower(std::string* str);
|
std::string* tolower(std::string* str);
|
||||||
|
|
||||||
|
bool verify_email(const std::string& email);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -101,7 +101,7 @@ bool sosc::MasterClient::ProcessLogin(Packet &pck) {
|
||||||
query->Reset();
|
query->Reset();
|
||||||
query->BindText(pck[0], 1);
|
query->BindText(pck[0], 1);
|
||||||
if(query->ScalarInt32() == 0)
|
if(query->ScalarInt32() == 0)
|
||||||
return LoginError(0x105);
|
return LoginError(0x101);
|
||||||
|
|
||||||
query = this->queries->at(QRY_USER_GET_PWD_HASH);
|
query = this->queries->at(QRY_USER_GET_PWD_HASH);
|
||||||
query->Reset();
|
query->Reset();
|
||||||
|
@ -146,18 +146,24 @@ bool sosc::MasterClient::ProcessRegistration(Packet &pck) {
|
||||||
return false;
|
return false;
|
||||||
pck.TrimRegions();
|
pck.TrimRegions();
|
||||||
|
|
||||||
|
if(pck[0].length() == 0)
|
||||||
|
return RegistrationError(0x101);
|
||||||
db::Query* query = this->queries->at(QRY_USER_NAME_REG_CHECK);
|
db::Query* query = this->queries->at(QRY_USER_NAME_REG_CHECK);
|
||||||
query->Reset();
|
query->Reset();
|
||||||
query->BindText(pck[0], 1);
|
query->BindText(pck[0], 1);
|
||||||
if(query->ScalarInt32() > 0)
|
if(query->ScalarInt32() > 0)
|
||||||
return RegistrationError(0x100);
|
return RegistrationError(0x100);
|
||||||
|
|
||||||
|
if(pck[2].length() == 0 || !str::verify_email(pck[2]))
|
||||||
|
return RegistrationError(0x111);
|
||||||
query = this->queries->at(QRY_USER_MAIL_REG_CHECK);
|
query = this->queries->at(QRY_USER_MAIL_REG_CHECK);
|
||||||
query->Reset();
|
query->Reset();
|
||||||
query->BindText(pck[2], 1);
|
query->BindText(pck[2], 1);
|
||||||
if(query->ScalarInt32() > 0)
|
if(query->ScalarInt32() > 0)
|
||||||
return RegistrationError(0x101);
|
return RegistrationError(0x110);
|
||||||
|
|
||||||
|
if(pck[1].length() == 0)
|
||||||
|
return RegistrationError(0x120);
|
||||||
query = this->queries->at(QRY_USER_REGISTER);
|
query = this->queries->at(QRY_USER_REGISTER);
|
||||||
query->Reset();
|
query->Reset();
|
||||||
query->BindText(pck[0], 1);
|
query->BindText(pck[0], 1);
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
Email: <br/>
|
Email: <br/>
|
||||||
<input type="test" id="reg-email" />
|
<input type="text" id="reg-email" />
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
Password: <br/>
|
Password: <br/>
|
||||||
|
@ -43,8 +43,8 @@
|
||||||
Confirm Password: <br/>
|
Confirm Password: <br/>
|
||||||
<input type="password" id="reg-conf-pwd" />
|
<input type="password" id="reg-conf-pwd" />
|
||||||
</label>
|
</label>
|
||||||
<input type="button" value="Register" />
|
<input type="button" value="Register" onclick="attempt_register();" />
|
||||||
<input type="button" value="Cancel" onclick="show_section('login')" />
|
<input type="button" value="Cancel" onclick="show_section('login');" />
|
||||||
</div>
|
</div>
|
||||||
<div id="client" class="hidden section">
|
<div id="client" class="hidden section">
|
||||||
<iframe id="client_iframe"></iframe>
|
<iframe id="client_iframe"></iframe>
|
||||||
|
|
|
@ -58,13 +58,41 @@ function attempt_login() {
|
||||||
error.innerHTML = error_text;
|
error.innerHTML = error_text;
|
||||||
error.classList.remove("hidden");
|
error.classList.remove("hidden");
|
||||||
} else {
|
} else {
|
||||||
alert("allo");
|
//show_section()
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each(lock_fields, x => x.disabled = false);
|
for_each(lock_fields, x => x.disabled = false);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function attempt_register() {
|
||||||
|
clear_errors();
|
||||||
|
|
||||||
|
let section = document.getElementById("register");
|
||||||
|
let error = section.getElementsByClassName("error")[0];
|
||||||
|
let lock_fields = filter(
|
||||||
|
to_array(section.getElementsByTagName("input")),
|
||||||
|
x => ["submit", "button", "text", "password"].indexOf(x.type) !== -1
|
||||||
|
);
|
||||||
|
|
||||||
|
let fields = {};
|
||||||
|
for_each(section.getElementsByTagName("input"), x => {
|
||||||
|
if(x.id.substr(0, 4) === "reg-")
|
||||||
|
fields[x.id.substr(4)] = x.value.trim();
|
||||||
|
});
|
||||||
|
|
||||||
|
if(fields["pwd"] === fields["conf-pwd"])
|
||||||
|
|
||||||
|
|
||||||
|
for_each(lock_fields, x => x.disabled = true);
|
||||||
|
ws.send(pack(
|
||||||
|
kClientToMaster.LoginRequest, [
|
||||||
|
document.getElementById("login-user").value,
|
||||||
|
document.getElementById("login-pwd").value
|
||||||
|
]
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
function show_section(id) {
|
function show_section(id) {
|
||||||
clear_inputs();
|
clear_inputs();
|
||||||
clear_errors();
|
clear_errors();
|
||||||
|
@ -82,8 +110,10 @@ function clear_inputs() {
|
||||||
let inputs = document.getElementsByTagName("input");
|
let inputs = document.getElementsByTagName("input");
|
||||||
|
|
||||||
for_each(inputs, x => {
|
for_each(inputs, x => {
|
||||||
if(types.indexOf(x.type) !== -1)
|
if(types.indexOf(x.type) !== -1) {
|
||||||
x.value = "";
|
x.value = "";
|
||||||
|
x.disabled = false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,26 +388,32 @@ Number.prototype.packDouble = function() {
|
||||||
/*** UINT8ARRAY EXTENSIONS ***/
|
/*** UINT8ARRAY EXTENSIONS ***/
|
||||||
|
|
||||||
Uint8Array.prototype.unpackInt16 = function(offset = 0) {
|
Uint8Array.prototype.unpackInt16 = function(offset = 0) {
|
||||||
|
offset += this.byteOffset;
|
||||||
return new DataView(this.buffer).getInt16(offset, false);
|
return new DataView(this.buffer).getInt16(offset, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
Uint8Array.prototype.unpackUint16 = function(offset = 0) {
|
Uint8Array.prototype.unpackUint16 = function(offset = 0) {
|
||||||
|
offset += this.byteOffset;
|
||||||
return new DataView(this.buffer).getUint16(offset, false);
|
return new DataView(this.buffer).getUint16(offset, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
Uint8Array.prototype.unpackInt32 = function(offset = 0) {
|
Uint8Array.prototype.unpackInt32 = function(offset = 0) {
|
||||||
|
offset += this.byteOffset;
|
||||||
return new DataView(this.buffer).getInt32(offset, false);
|
return new DataView(this.buffer).getInt32(offset, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
Uint8Array.prototype.unpackUint32 = function(offset = 0) {
|
Uint8Array.prototype.unpackUint32 = function(offset = 0) {
|
||||||
|
offset += this.byteOffset;
|
||||||
return new DataView(this.buffer).getUint32(offset, false);
|
return new DataView(this.buffer).getUint32(offset, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
Uint8Array.prototype.unpackFloat = function(offset = 0) {
|
Uint8Array.prototype.unpackFloat = function(offset = 0) {
|
||||||
|
offset += this.byteOffset;
|
||||||
return new DataView(this.buffer).getFloat32(offset, false);
|
return new DataView(this.buffer).getFloat32(offset, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
Uint8Array.prototype.unpackDouble = function(offset = 0) {
|
Uint8Array.prototype.unpackDouble = function(offset = 0) {
|
||||||
|
offset += this.byteOffset;
|
||||||
return new DataView(this.buffer).getFloat64(offset, false);
|
return new DataView(this.buffer).getFloat64(offset, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,10 @@ body {
|
||||||
padding-top: 36px;
|
padding-top: 36px;
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: #000;
|
/*background: #000;
|
||||||
color: #fff;
|
color: #fff;*/
|
||||||
/*background: #fff;
|
background: #fff;
|
||||||
color: #000;*/
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hidden {
|
.hidden {
|
||||||
|
|
Loading…
Reference in a new issue