private void _checkDriver(BplIdentity DriverId, string RegistrationCode, AuthorizationSessionKind actionKind, Action<DriverAuthorizationResult> onSuccess, Action<GeneralFailure> onFailure) { if (DriverId == null || RegistrationCode.IsEmpty()) { Log.Warn("Driver registration: Attempt to check driver with bad arguments. UserId:{0}, UserSsn:{1}", DriverId, RegistrationCode); onSuccess(new DriverAuthorizationResult { Result = RegistrationResult.InvalidInformation }); } else { var di = new GetDriverInfo { DriverId = DriverId }; Services.Invoke(di, o => { if (o != null) { if (o.DriverSsn.EqualsIgnoreCase(RegistrationCode)) { Log.Info("Driver registration: Initialized for driver '{0}'.", DriverId); var contacts = o.Contacts.Where(c => c.Type == ContactTypes.MobilePhone || c.Type == ContactTypes.Email).Select(c => c.Clone()); var result = new DriverAuthorizationResult { Result = RegistrationResult.Success, Token = _createNewAuthorizationToken(DriverId, contacts, o.Name, actionKind) }; result.Contacts.AddRange(contacts); if (result.Contacts.Count > 0) { onSuccess(result); } else { Log.Warn("Driver registration: Driver '{0}' has no valid contact information.", DriverId); onSuccess(new DriverAuthorizationResult { Result = RegistrationResult.InvalidInformation }); } } else { Log.Warn("Driver registration: Driver '{0}' SSN ({1}) not matches database value ({2}).", DriverId, RegistrationCode, o.DriverSsn); onSuccess(new DriverAuthorizationResult { Result = RegistrationResult.InvalidInformation }); } } else { Log.Warn("Driver registration: Driver '{0}' is not found in database or blocked.", DriverId); onSuccess(new DriverAuthorizationResult { Result = RegistrationResult.ClientBlocked }); } }, e => onFailure(e) ); } }
private string _createNewAuthorizationToken(BplIdentity driverId, IEnumerable<Contact> associatedContacts, MultiString contactName, AuthorizationSessionKind kind) { var session = new DriverAuthorizationSessionData { DriverId = driverId, SessionStart = TimeStamp.LocalNow, //SessionKind = kind IsRegistration = kind == AuthorizationSessionKind.Registration }; if (associatedContacts != null) { session.LoginContacts.AddRange(associatedContacts.Select(c => new LoginContact(c))); session.LoginContacts.Apply(c => c.ContactName = contactName); } return CryptServices.Encode(session); }