Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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
            });
        }