public void Handle(IAriesSession session, AnswerChallenge answer) { var challenge = session.GetAttribute("challenge") as string; if (challenge == null) { session.Close(); return; } var myAnswer = ChallengeResponse.AnswerChallenge(challenge, Secret); if (myAnswer != answer.Answer) { session.Close(); return; } //Trust established, good to go var newSession = Sessions.UpgradeSession <GluonSession>(session, x => { x.IsAuthenticated = true; x.CallSign = (string)session.GetAttribute("callSign"); x.PublicHost = (string)session.GetAttribute("publicHost"); x.InternalHost = (string)session.GetAttribute("internalHost"); }); newSession.Write(new AnswerAccepted()); }
public GluonHost(GluonHostPool pool, string callSign, IKernel kernel, ServerConfiguration config) { this.Pool = pool; this.CallSign = callSign; this.Client = new AriesClient(Pool.Kernel); Callbacks = new Dictionary <Guid, TaskCompletionSource <IGluonCall> >(); Client.AddSubscriber(this); Router = new AriesPacketRouter(); Router.On <RequestClientSession>((session, message) => { session.Write(new RequestChallenge() { CallSign = CallSign, PublicHost = PublicHost, InternalHost = InternalHost }); }); Router.On <RequestChallengeResponse>((session, message) => { var challenge = (RequestChallengeResponse)message; var answer = ChallengeResponse.AnswerChallenge(challenge.Challenge, config.Secret); session.Write(new AnswerChallenge { Answer = answer }); }); Router.On <AnswerAccepted>((session, message) => { OnAuthenticated(); }); }
public void Handle(IGluonSession session, RequestChallengeResponse challenge) { var rawSession = ((CityConnection)session); var answer = ChallengeResponse.AnswerChallenge(challenge.Challenge, Secret); session.Write(new AnswerChallenge { Answer = answer }); }