Jump to content

SQL-based authentication: Difference between revisions

Line 448:
method : Run() ~ Nil {
CreateUser("robertobjeck", "beer");
IO.Console->Print("authenticated?=")->PrintLine(AuthenticateUser("robertobjeck", "beer"));
@conn->Close();leaving {
@conn->Close();
};
}
 
method : AuthenticateUser(username : String, password : String) ~ BoolNil {
status := false;
ps : ParameterStatement;
result : ResultSet;
if(@conn->IsOpen()) {
sql := "SELECT pass_salt, pass_md5 FROM users WHERE username = ?";
Line 462 ⟶ 466:
result := ps->Select();
if(result <> Nil & result->Next()) {
saltsalt_buffer := resultByte->GetVarchar(1)New[16];
md5_db_password := result->GetVarcharGetBlob(21, salt_buffer);
salt := "";
for(i := 0; i < 16; i+=1;) {
salt->Append(salt_buffer[i]);
};
 
db_password_buffer := Byte->New[16];
result->GetBlob(2, db_password_buffer);
 
password->Append(salt);
md5_user_passworduser_password_buffer := Hash->MD5(password->ToByteArray())->ToHexString();
status := md5_user_password->Equals(md5_db_password);
IO.Console->Print("user: authenticated=")->PrintLine(IsEqual(db_password_buffer, user_password_buffer));
};
ps->Close();
};
returnleaving status;{
if(ps <> Nil) {
ps->Close();
};
if(ps <> Nil) {
ps->Close();
};
};
}
Line 483 ⟶ 503:
md5_password := Hash->MD5(password->ToByteArray());
 
ps : ParameterStatement;
if(@conn->IsOpen()) {
sql := "INSERT INTO users(username, pass_salt, pass_md5) VALUES (?, ?, ?)";
ps := @conn->CreateParameterStatement(sql);
ps->SetVarchar(1, username);
ps->SetVarcharSetBytes(2, salt->ToByteArray());
ps->SetVarcharSetBytes(3, md5_password->ToHexString());
IO.Console->Print("adding user: username=")->Print(username)
->Print(", salt=")->Print(salt)
->Print(", status=")->PrintLine(ps->Update());
ps->Close()};
leaving {
if(ps <> Nil) {
ps->Close();
};
};
}
method : IsEqual(left : Byte[], right : Byte[]) ~ Bool {
if(left->Size() <> right->Size()) {
return false;
};
each(i : left) {
if(left[i] <> right[i]) {
return false;
};
};
return true;
}
}</lang>
 
 
=={{header|Perl}}==
760

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.