コード例 #1
0
        public XmppHandlerResult ProcessElement(Handshake element, XmppSession session, XmppHandlerContext context)
        {
            var test = new Handshake(secret, session.AuthData as string);

            if (element.Value != test.Value)
            {
                return(Error(session, StreamErrorCondition.NotAuthorized));
            }

            session.Authenticate(null);
            session.Bind(null);
            return(Send(session, new Handshake()));
        }
コード例 #2
0
        public XmppHandlerResult ProcessElement(Response element, XmppSession session, XmppHandlerContext context)
        {
            var authStep = session.AuthData as AuthData;

            if (authStep == null)
            {
                return(Error(session, FailureCondition.temporary_auth_failure));
            }

            if (authStep.Step == AuthStep.Step1)
            {
                var step = new Step2(element.TextBase64);
                var user = context.Storages.Users.GetUser(step.Username);

                if (user != null &&
                    string.Compare(session.Jid.Server, step.Realm, StringComparison.OrdinalIgnoreCase) == 0 &&
                    step.Authorize(step.Username, user.Password))
                {
                    var challenge = new Challenge
                    {
                        TextBase64 = string.Format("rspauth={0}", step.CalculateResponse(step.Username, user.Password, string.Empty))
                    };
                    authStep.DoStep(step.Username);
                    return(Send(session, challenge));
                }
                else
                {
                    return(Error(session, FailureCondition.not_authorized));
                }
            }
            else if (authStep.Step == AuthStep.Step2)
            {
                session.Authenticate(authStep.UserName);
                session.Connection.Reset();
                return(Send(session, new Success()));
            }
            else
            {
                return(Error(session, FailureCondition.temporary_auth_failure));
            }
        }