mirror of
https://github.com/esiur/esiur-js.git
synced 2025-06-27 15:23:11 +00:00
iAuth
This commit is contained in:
@ -4,6 +4,7 @@ import { createRequire } from 'module'
|
||||
import AsyncReply from "../../src/Core/AsyncReply.js";
|
||||
import DistributedServer from "../../src/Net/IIP/DistributedServer.js";
|
||||
import IMembership from "../../src/Security/Membership/IMembership.js";
|
||||
import AuthorizationResults from "../../src/Security/Membership/AuthorizationResults.js";
|
||||
import WSocket from "../../src/Net/Sockets/WSocket.js";
|
||||
import MemoryStore from "../../src/Stores/MemoryStore.js";
|
||||
import DC from "../../src/Data/DC.js";
|
||||
@ -13,6 +14,12 @@ import TypedMap from "../../src/Data/TypedMap.js";
|
||||
import { Arg, Evt, Func, Prop, TemplateDescriber } from "../../src/Resource/Template/TemplateDescriber.js";
|
||||
import { Int32 } from "../../src/Data/ExtendedTypes.js";
|
||||
|
||||
import AuthorizationResultsResponse from "../../src/Security/Membership/AuthorizationResultsResponse.js";
|
||||
import IIPAuthPacketIAuthDestination from '../../src/Net/Packets/IIPAuthPacketIAuthDestination.js';
|
||||
import IIPAuthPacketIAuthFormat from '../../src/Net/Packets/IIPAuthPacketIAuthFormat.js';
|
||||
import IIPAuthPacketHeader from '../../src/Net/Packets/IIPAuthPacketHeader.js';
|
||||
import Codec from '../../src/Data/Codec.js';
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
|
||||
|
||||
@ -31,6 +38,64 @@ class MyMembership extends IMembership {
|
||||
getPassword(username, domain) {
|
||||
return new AsyncReply(DC.stringToBytes("1234"));
|
||||
}
|
||||
|
||||
authorize(session){
|
||||
|
||||
let results = new AuthorizationResults();
|
||||
|
||||
if (session.authorizedAccount == "admin")
|
||||
{
|
||||
results.clue = "What is 5 + 2 ?";
|
||||
results.destination = IIPAuthPacketIAuthDestination.Self;
|
||||
results.requiredFormat = IIPAuthPacketIAuthFormat.Number;
|
||||
results.response = AuthorizationResultsResponse.IAuthHashed;
|
||||
results.expire = new Date(new Date().getTime() + 30000);
|
||||
results.reference = Math.round(Math.random() * 100000);
|
||||
}
|
||||
else if (session.authorizedAccount == "demo")
|
||||
{
|
||||
results.clue = "What is 10 * 2 ?";
|
||||
results.destination = IIPAuthPacketIAuthDestination.Self;
|
||||
results.requiredFormat = IIPAuthPacketIAuthFormat.Number;
|
||||
results.response = AuthorizationResultsResponse.IAuthPlain;
|
||||
results.expire = new Date(new Date().getTime() + 30000);
|
||||
results.reference = Math.round(Math.random() * 100000);
|
||||
}
|
||||
else {
|
||||
results.response = AuthorizationResultsResponse.Success;
|
||||
}
|
||||
|
||||
return new AsyncReply(results);
|
||||
}
|
||||
|
||||
authorizeHashed(session, reference, algorithm, value){
|
||||
|
||||
// compute hash
|
||||
let remoteNonce = session.remoteHeaders.get(IIPAuthPacketHeader.Nonce);
|
||||
let localNonce = session.localHeaders.get(IIPAuthPacketHeader.Nonce);
|
||||
|
||||
var hashFunc = SHA256.Create();
|
||||
// local nonce + password or token + remote nonce
|
||||
var challenge = hashFunc.ComputeHash(new BinaryList()
|
||||
.addUint8Array(remoteNonce)
|
||||
.addUint8Array(Codec.compose(7, null)) // answer is 7
|
||||
.addUint8Array(localNonce)
|
||||
.toArray());
|
||||
|
||||
if (challenge.sequenceEqual(value))
|
||||
return new AsyncReply(new AuthorizationResults(AuthorizationResultsResponse.Success));
|
||||
else
|
||||
return new AsyncReply(new AuthorizationResults(AuthorizationResultsResponse.Failed));
|
||||
|
||||
}
|
||||
|
||||
authorizePlain(session, reference, value) {
|
||||
if (value == 20)
|
||||
return new AsyncReply(new AuthorizationResults(AuthorizationResultsResponse.Success));
|
||||
else
|
||||
return new AsyncReply(new AuthorizationResults(AuthorizationResultsResponse.Failed));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var server;
|
||||
@ -53,12 +118,12 @@ class MyChat extends IResource {
|
||||
}
|
||||
|
||||
get users() {
|
||||
return server.connections.map(x=>x.session.remoteAuthentication.username);
|
||||
return server.connections.map(x=>x.session.authorizedAccount);
|
||||
}
|
||||
|
||||
send(msg, sender)
|
||||
{
|
||||
let s = new TypedMap({ msg, usr: sender.session.remoteAuthentication.username, date: new Date()});
|
||||
let s = new TypedMap({ msg, usr: sender.session.authorizedAccount, date: new Date()});
|
||||
this.messages.push(s);
|
||||
this._emit("message", s);
|
||||
}
|
||||
|
Reference in New Issue
Block a user