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())); }
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)); } }