public Games(LoginContext loginContext, RestClient client, string cookie) { this.client = client; this.loginContext = loginContext; this.cookie = cookie; this.GameId = loginContext.gameId; }
public CartControllerTest() { LoginContext.GetInstance().Reset(); cartRequest = new CartRequest { ProductId = "1", UserId = "1" }; }
public virtual KernelTransaction NewInstance(KernelTransaction.Type type, LoginContext loginContext, long timeout) { AssertCurrentThreadIsNotBlockingNewTransactions(); SecurityContext securityContext = loginContext.Authorize(_tokenHolders.propertyKeyTokens().getOrCreateId, _currentDatabaseName); try { while (!_newTransactionsLock.readLock().tryLock(1, TimeUnit.SECONDS)) { AssertRunning(); } try { AssertRunning(); TransactionId lastCommittedTransaction = _transactionIdStore.LastCommittedTransaction; KernelTransactionImplementation tx = _localTxPool.acquire(); StatementLocks statementLocks = _statementLocksFactory.newInstance(); tx.Initialize(lastCommittedTransaction.TransactionIdConflict(), lastCommittedTransaction.CommitTimestamp(), statementLocks, type, securityContext, timeout, _userTransactionIdCounter.incrementAndGet()); return(tx); } finally { _newTransactionsLock.readLock().unlock(); } } catch (InterruptedException ie) { Thread.interrupted(); throw new TransactionFailureException("Fail to start new transaction.", ie); } }
public ReviewControllerTest() { LoginContext.GetInstance().Reset(); reviewRequest = new ReviewRequest { CartItemId = "1", ProductId = "1", UserId = "1" }; }
public IHttpActionResult GetAllCartsByUser() { try { string token = ControllerHelper.GetTokenFromRequest(Request); ControllerHelper.ValidateUserRole(Request, new string[] { ESportUtils.CLIENT_ROLE }); UserContextDTO userContext = LoginContext.GetInstance().GetUserContextByToken(token); CartRequest cartRequest = new CartRequest { UserId = userContext.UserDTO.UserId }; List <CartDTO> cartsDTOResult = cartService.GetAllCartsByUser(cartRequest); ControllerResponse response = ControllerHelper.CreateSuccessResponse("Carritos"); response.Data = cartsDTOResult; return(Ok(response)); } catch (BadRequestException e) { return(CreateBadResponse(e.Message)); } catch (RepositoryException e) { return(CreateBadResponse(e.Message)); } catch (OperationException e) { return(CreateBadResponse(e.Message)); } catch (Exception) { return(CreateBadResponse("Ocurrió un error al obtener carritos")); } }
public ActionResult Nuevo(Usuario model) { try { if (ModelState.IsValid) { using (LoginContext db = new LoginContext()) { string cadenaEncriptada = Encrypt.GetMD5(model.Password); var oUsu = new Usuario(); oUsu.Nombre = model.Nombre; oUsu.Apellido = model.Apellido; oUsu.Direccion = model.Direccion; oUsu.RoldID = model.RoldID; oUsu.UserName = model.UserName; oUsu.Password = cadenaEncriptada; db.Usuarios.Add(oUsu); db.SaveChanges(); } return(Redirect("/")); } return(View(model)); }catch (Exception ex) { throw new Exception(ex.Message); } }
public IHttpActionResult CancelCart() { try { ControllerHelper.ValidateUserRole(Request, new string[] { ESportUtils.CLIENT_ROLE }); string token = ControllerHelper.GetTokenFromRequest(Request); CartRequest cartRequest = new CartRequest( ) { UserId = ControllerHelper.GetUserIdFromToken(token) }; cartService.CancelCart(cartRequest); UserContextDTO userContext = GetUserContextFromRequest(Request); userContext.PendingCart = null; LoginContext.GetInstance().SaveContext(userContext); ControllerResponse response = ControllerHelper.CreateSuccessResponse("El carrito se cancelo satisfactoriamente"); response.Data = userContext; return(Ok(response)); } catch (BadRequestException e) { return(CreateBadResponse(e.Message)); } catch (RepositoryException e) { return(CreateBadResponse(e.Message)); } catch (OperationException e) { return(CreateBadResponse(e.Message)); } catch (Exception) { return(CreateBadResponse("Ocurrió un error al cancelar carrito")); } }
/// <summary>Log the details of a login context</summary> /// <param name="name">name to assert that the user is logged in as</param> /// <param name="loginContext">the login context</param> public static void LogLoginDetails(string name, LoginContext loginContext) { NUnit.Framework.Assert.IsNotNull("Null login context", loginContext); Subject subject = loginContext.GetSubject(); Log.Info("Logged in as {}:\n {}", name, subject); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Before public void setUp() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void SetUp() { TestGraphDatabaseFactory s = new TestEnterpriseGraphDatabaseFactory(); _db = ( GraphDatabaseFacade )s.NewImpermanentDatabaseBuilder(TestDirectory.storeDir()).setConfig(SecuritySettings.property_level_authorization_enabled, "true").setConfig(SecuritySettings.property_level_authorization_permissions, "Agent=alias,secret").setConfig(SecuritySettings.procedure_roles, "test.*:procRole").setConfig(GraphDatabaseSettings.auth_enabled, "true").newGraphDatabase(); EnterpriseAuthAndUserManager authManager = ( EnterpriseAuthAndUserManager )_db.DependencyResolver.resolveDependency(typeof(EnterpriseAuthManager)); Procedures procedures = _db.DependencyResolver.resolveDependency(typeof(Procedures)); procedures.RegisterProcedure(typeof(TestProcedure)); EnterpriseUserManager userManager = authManager.UserManager; userManager.NewUser("Neo", password("eon"), false); userManager.NewUser("Smith", password("mr"), false); userManager.NewUser("Jones", password("mr"), false); userManager.NewUser("Morpheus", password("dealwithit"), false); userManager.NewRole("procRole", "Jones"); userManager.NewRole("Agent", "Smith", "Jones"); userManager.AddRoleToUser(PredefinedRoles.ARCHITECT, "Neo"); userManager.AddRoleToUser(PredefinedRoles.READER, "Smith"); userManager.AddRoleToUser(PredefinedRoles.READER, "Morpheus"); _neo = authManager.Login(authToken("Neo", "eon")); _smith = authManager.Login(authToken("Smith", "mr")); _jones = authManager.Login(authToken("Jones", "mr")); _morpheus = authManager.Login(authToken("Morpheus", "dealwithit")); }
public ActionResult ResetPassword(ResetPasswordModel resetModel) { string Message = ""; bool status = false; if (ModelState.IsValid) { using (LoginContext context = new LoginContext()) { var user = context.Users.Where(u => u.ResetPasswordCode == resetModel.ResetCode).FirstOrDefault(); if (user != null) { user.Password = Crypto.Hash(resetModel.NewPassword); user.ResetPasswordCode = ""; //this line for no one can use the same email for multipe times to reset pass context.Configuration.ValidateOnSaveEnabled = false; context.SaveChanges(); status = true; Message = "New password is updated successfully"; } } } else { Message = "Something Invalid"; } ViewBag.Status = status; ViewBag.Message = Message; return(View(resetModel)); }
private void BuildLoginContext() { var dbContextOptions = new DbContextOptionsBuilder <LoginContext>() .UseInMemoryDatabase(databaseName: "invitations_tests") .Options; LoginContext = new LoginContext(dbContextOptions); ClientId = Guid.NewGuid(); InvitationTemplateId = Guid.Parse("a2fc2212-253e-47c1-b847-27c10f83f7f5"); LoginContext.Clients.Add(new Client() { Id = ClientId, AllowInvitationSignUp = true, ServiceDetails = new ServiceDetails() { ServiceName = "Acme Service", ServiceTeam = "Acme Service Team", PostPasswordResetReturnUrl = "https://serviceurl", EmailTemplates = new List <EmailTemplate>() { new EmailTemplate() { Name = "SignUpInvitation", TemplateId = InvitationTemplateId }, new EmailTemplate() { Name = "LoginSignupError", TemplateId = InvitationTemplateId } } } }); LoginContext.SaveChanges(); }
private void AssertFail(LoginContext subject, string query, string partOfErrorMsg) { assertThat(Execute(subject, query, r => { Debug.Assert(!r.hasNext()); }), containsString(partOfErrorMsg)); }
public ActionResult ForgetPassword(string EmailId) { string Message = ""; using (LoginContext context = new LoginContext()) { var account = context.Users.Where(a => a.Email == EmailId).FirstOrDefault(); if (account != null) { //generate reset password link string resetCode = Guid.NewGuid().ToString(); SendVerificationlinkEmail(account.Email, resetCode, "resetPassCode", "ResetPassword"); account.ResetPasswordCode = resetCode; context.Configuration.ValidateOnSaveEnabled = false; //this line for avoiding confirm pass not match issue , becus confirm not in db and validate //will throw error context.SaveChanges(); Message = "Reset Password Link has been sent to your Email : " + EmailId; } else { Message = "There is no aacount with this email"; } } ViewBag.Message = Message; return(View()); }
private void AssertEmpty(LoginContext subject, string query) { assertThat(Execute(subject, query, r => { Debug.Assert(!r.hasNext()); }), equalTo("")); }
public async Task Then_password_is_validated_correctly(string newpassword, bool expectedValidity) { var dbContextOptions = new DbContextOptionsBuilder <LoginContext>() .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) .Options; var _loginContext = new LoginContext(dbContextOptions); _loginContext.InvalidPasswords.Add(new InvalidPassword() { Password = "******" }); _loginContext.InvalidPasswords.Add(new InvalidPassword() { Password = "******" }); _loginContext.InvalidPasswords.Add(new InvalidPassword() { Password = "******" }); await _loginContext.SaveChangesAsync(); var validator = new CustomPasswordValidator <LoginUser>(Substitute.For <ILogger <CustomPasswordValidator <LoginUser> > >(), _loginContext); var userManager = new UserManager <LoginUser>(Substitute.For <IUserStore <LoginUser> >(), Substitute.For <IOptions <IdentityOptions> >(), Substitute.For <IPasswordHasher <LoginUser> >() , Substitute.For <IEnumerable <IUserValidator <LoginUser> > >(), new List <IPasswordValidator <LoginUser> >(), Substitute.For <ILookupNormalizer>(), new IdentityErrorDescriber(), Substitute.For <IServiceProvider>(), Substitute.For <ILogger <UserManager <LoginUser> > >()); var result = await validator.ValidateAsync(userManager, new LoginUser(), newpassword); (result == IdentityResult.Success).Should().Be(expectedValidity); }
/// <summary> /// Implements the SPNEGO authentication sequence interaction using the current default principal /// in the Kerberos cache (normally set via kinit). /// </summary> /// <param name="token">the authentication token being used for the user.</param> /// <exception cref="System.IO.IOException">if an IO error occurred.</exception> /// <exception cref="AuthenticationException">if an authentication error occurred.</exception> /// <exception cref="Org.Apache.Hadoop.Security.Authentication.Client.AuthenticationException /// "/> private void DoSpnegoSequence(AuthenticatedURL.Token token) { try { AccessControlContext context = AccessController.GetContext(); Subject subject = Subject.GetSubject(context); if (subject == null || (subject.GetPrivateCredentials <KerberosKey>().IsEmpty() && subject.GetPrivateCredentials <KerberosTicket>().IsEmpty())) { Log.Debug("No subject in context, logging in"); subject = new Subject(); LoginContext login = new LoginContext(string.Empty, subject, null, new KerberosAuthenticator.KerberosConfiguration ()); login.Login(); } if (Log.IsDebugEnabled()) { Log.Debug("Using subject: " + subject); } Subject.DoAs(subject, new _PrivilegedExceptionAction_287(this)); } catch (PrivilegedActionException ex) { // Loop while the context is still not established throw new AuthenticationException(ex.GetException()); } catch (LoginException ex) { throw new AuthenticationException(ex); } AuthenticatedURL.ExtractToken(conn, token); }
public IHttpActionResult RemoveItem(CartRequest cartRequest) { try { ControllerHelper.ValidateAndSetUserInCartRequest(Request, cartRequest); CartDTO cartResult = cartService.RemoveProduct(cartRequest); UserContextDTO userContext = GetUserContextFromRequest(Request); userContext.PendingCart = cartResult; LoginContext.GetInstance().SaveContext(userContext); ControllerResponse response = ControllerHelper.CreateSuccessResponse("El producto se eliminó del carrito satisfactoriamente"); response.Data = userContext; return(Ok(response)); } catch (BadRequestException e) { return(CreateBadResponse(e.Message)); } catch (RepositoryException e) { return(CreateBadResponse(e.Message)); } catch (OperationException e) { return(CreateBadResponse(e.Message)); } catch (Exception) { return(CreateBadResponse("Ocurrió un error al eliminar producto del carrito")); } }
public ActionResult Login(Account user) { //this action menthod is for handling POST using (var ctx = new LoginContext()) { Account account = ctx.Accounts.Where(p => p.UserName.Equals(user.UserName) && p.Password.Equals(user.Password)).FirstOrDefault(); if (account != null) { if (user.IsRemembered == true) { Response.Cookies["UsernameCookie"].Value = user.UserName; Response.Cookies["PasswordCookie"].Value = user.Password; Response.Cookies["IsRememberedCookie"].Value = user.IsRemembered.ToString(); } else { Response.Cookies["UsernameCookie"].Expires = DateTime.Now.AddDays(-1); Response.Cookies["PasswordCookie"].Expires = DateTime.Now.AddDays(-1); Response.Cookies["IsRememberedCookie"].Expires = DateTime.Now.AddDays(-1); } ctx.SaveChanges(); Session["LoggedUsername"] = user.UserName; Session["StateOfLogin"] = "******"; return(RedirectToAction("AfterLogin", "Login")); } } return(View(user)); }
public ActionResult AccountChooser() { LoginContext AllLogins = new LoginContext(); List <LoginModel> Users = AllLogins.UserList.ToList(); return(View(Users)); }
public async Task Arrange() { UserService.FindByEmail(Arg.Any <string>()).Returns(default(LoginUser)); LoginContext.Clients.Add(new Client() { Id = ClientId, ServiceDetails = new ServiceDetails() { PostPasswordResetReturnUrl = "https://returnurl", EmailTemplates = new List <EmailTemplate>() { new EmailTemplate() { Name = "PasswordResetNoAccount", TemplateId = Guid.NewGuid() }, new EmailTemplate() { Name = "PasswordReset", TemplateId = Guid.NewGuid() }, new EmailTemplate() { Name = "SignUpInvitation", TemplateId = Guid.NewGuid() }, } } }); await LoginContext.SaveChangesAsync(); }
public async Task SetUp() { var dbContextOptions = new DbContextOptionsBuilder <LoginContext>() .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) .Options; _loginContext = new LoginContext(dbContextOptions); _loginContext.Clients.Add(new Data.Entities.Client() { IdentityServerClientId = "mvc", ServiceDetails = new ServiceDetails { ServiceName = "Acme Service", SupportUrl = "https://acme.gov.uk/Support" } }); await _loginContext.SaveChangesAsync(); _interactionService = Substitute.For <IIdentityServerInteractionService>(); _interactionService.GetLogoutContextAsync("logoutid").Returns(new IdentityServer4.Models.LogoutRequest("iframeurl", new LogoutMessage()) { ClientId = "mvc", PostLogoutRedirectUri = "https://postlogouturi" }); _userService = Substitute.For <IUserService>(); var principal = new TestPrincipal(new Claim(JwtClaimTypes.Subject, "user123")); _eventService = Substitute.For <IEventService>(); _httpContextAccessor = Substitute.For <IHttpContextAccessor>(); _httpContextAccessor.HttpContext.User.Returns(principal); _handler = new LogoutHandler(_interactionService, _loginContext, _userService, _eventService, _httpContextAccessor); }
//POST : /api/ApplicationUser/Login public async Task <IActionResult> Login(LoginContext model) { var user = await _userManager.FindByEmailAsync(model.Email) ?? await _userManager.FindByNameAsync(model.UserName); if (user != null && await _userManager.CheckPasswordAsync(user, model.Password)) { //Get role assigned to the user var role = await _userManager.GetRolesAsync(user); IdentityOptions _options = new IdentityOptions(); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim("UserID", user.Id.ToString()), new Claim(ClaimTypes.Role, role.FirstOrDefault()), new Claim("FullName", role.FirstOrDefault()) }), Expires = DateTime.UtcNow.AddDays(1), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes("vfvrbylhzybr18021")), SecurityAlgorithms.HmacSha256Signature) }; var tokenHandler = new JwtSecurityTokenHandler(); var securityToken = tokenHandler.CreateToken(tokenDescriptor); var token = tokenHandler.WriteToken(securityToken); return(Ok(new { token })); } else { return(BadRequest(new { message = "Username or password is incorrect." })); } }
public TryLoginUser(User user) { LoginContext context = new LoginContext(); User U = context.users.SingleOrDefault(u => u.Username == user.Username && u.Password == user.Password); if (U == null) { return; } if (U.UserType == "Administrator") { this.IsUser = true; this.UserRoll = "Administrator"; Program.IsAuthenticated = true; Program.UserRoll = "Administrator"; Program.User = U.Username; } else if (U.UserType == "User") { this.IsUser = true; this.UserRoll = "User"; Program.IsAuthenticated = true; Program.UserRoll = "User"; Program.User = U.Username; } else { Environment.Exit(0); } }
/// <summary> /// 登录 /// </summary> /// <param name="type"></param> /// <returns></returns> public bool Login(LoginType type) { ILoginStrategy strategy = null; switch (type) { case LoginType.Email: strategy = new EmailLogin(); break; case LoginType.Phone: strategy = new PhoneLogin(); break; case LoginType.QrCode: strategy = new QrCodeLogin(); break; } _loginContext = new LoginContext(strategy, this); JObject j = _loginContext.Login(); //解析返回值 AuthInfoHelper auth = new AuthInfoHelper(j); if (auth.Code == 200) { ID = auth.UserID; return(true); } return(false); }
public virtual void TestServerLogin() { LoginContext loginContext = CreateLoginContextZookeeperLocalhost(); loginContext.Login(); loginContext.Logout(); }
// POST: AccountView public ActionResult AccountViewer(int empID) { LoginContext AllLogins = new LoginContext(); LoginModel User = AllLogins.UserList.Single(Person => Person.ID == empID); return(View(User)); }
public void SetUp() { var dbContextOptions = new DbContextOptionsBuilder <LoginContext>() .UseInMemoryDatabase(databaseName: "CreatePasswordHandler_tests") .Options; LoginContext = new LoginContext(dbContextOptions); InvitationId = Guid.NewGuid(); LoginContext.Invitations.Add(new Invitation() { Id = InvitationId, Email = "*****@*****.**", SourceId = "ABC123", GivenName = "GN1", FamilyName = "FN1" }); LoginContext.SaveChanges(); CallbackService = Substitute.For <ICallbackService>(); UserService = Substitute.For <IUserService>(); NewLoginUserId = Guid.NewGuid(); Handler = new CreatePasswordHandler(UserService, LoginContext, CallbackService); }
public CategoryControllerTest() { LoginContext.GetInstance().Reset(); categoryRequest = new CategoryRequest { CategoryId = "1" }; }
public static async Task performAuth(DBUserLoginRequest user, statusResponseList <DBBasicAuthority> callback) { //throw new Exception("TEST EXCEPTION"); if (callback == null) { throw new Exception("Callback must not be null"); } var httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(ServerURLs.authURL); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; httpWebRequest.ServicePoint.ConnectionLimit = 3; httpWebRequest.Timeout = 30000; httpWebRequest.KeepAlive = false; var loginContext = new LoginContext(user); var jsonUser = JsonConvert.SerializeObject(loginContext); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(jsonUser); } var response = await httpWebRequest.GetResponseAsync(); string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd(); httpWebRequest.Abort(); var exchangeInfo = JsonConvert.DeserializeObject <ExchengeInfo>(responseData); if (!exchangeInfo.success) { callback(false, "Login failed", "Incorrect username/password detected, please try again", null); return; } if (exchangeInfo.profiles == null || exchangeInfo.profiles.Length == 0) { callback(false, "Warning:", "You currently have no app setups available, go to your dashboard and create one!", null); return; } var localDataStore = DBLocalDataStore.GetInstance(); localDataStore.AddUserInfo(user); localDataStore.ClearBasicAuthority(); var profilesList = new List <DBBasicAuthority>(); foreach (DBBasicAuthority profile in exchangeInfo.profiles) { profilesList.Add(profile); localDataStore.AddBasicAuthority(profile); } callback(true, null, "OK", profilesList); }
public MainWindow() { InitializeComponent(); notAnsweredListBox.Items.SortDescriptions.Add( new System.ComponentModel.SortDescription("CreateTime", System.ComponentModel.ListSortDirection.Ascending)); var mainContext = new CRMContext(); DataContext = mainContext; ((CRMContext)DataContext).mainWindow = this; var login = new LoginView(); var loginModel = new LoginContext(mainContext.serverIp); login.DataContext = loginModel; loginModel.View = login; var t = login.ShowDialog(); if (t != true) { Environment.Exit(0); } mainContext.SipUser = AppSettings.SipInfo?.SipUser; mainContext.SipSecret = AppSettings.SipInfo?.SipSecret; mainContext.InitMysqlAndSip(); }
private void BindSecure(System.String username, System.String password, AuthenticationTypes authenticationTypes) { if ((authenticationTypes & AuthenticationTypes.Secure) != 0) { LoginContext loginContext = null; try { if (username != null && password != null) { AuthenticationCallbackHandler callbackHandler = new AuthenticationCallbackHandler (username,password); loginContext = new LoginContext (SecurityAppName, callbackHandler); } else loginContext = new LoginContext (SecurityAppName); loginContext.login (); } catch (Exception e) { throw new LdapException ("Failed to create login security context", 80, "", e); } Krb5Helper krb5Helper = null; try { krb5Helper = new Krb5Helper ("ldap@" + conn.Host, username, loginContext.getSubject (), authenticationTypes, SecurityMech); } finally { loginContext.logout(); } sbyte [] token = krb5Helper.ExchangeTokens (Krb5Helper.EmptyToken); for (;;) { LdapResponseQueue queue = Bind(LdapConnection.Ldap_V3, username, token, null, null, AuthenticationMech); LdapResponse res = (LdapResponse) queue.getResponse (); if (res.ResultCode != LdapException.SASL_BIND_IN_PROGRESS && res.ResultCode != LdapException.SUCCESS) { krb5Helper.Dispose(); throw new LdapException(ExceptionMessages.CONNECTION_ERROR, res.ResultCode, res.ErrorMessage); } Asn1OctetString serverSaslCreds = ((RfcBindResponse)res.Asn1Object.Response).ServerSaslCreds; token = serverSaslCreds != null ? serverSaslCreds.byteValue () : null; token = krb5Helper.ExchangeTokens(token == null ? Krb5Helper.EmptyToken : token); if (res.ResultCode != LdapException.SASL_BIND_IN_PROGRESS) break; conn.ReplaceStreams (conn.InputStream,conn.OutputStream); } System.IO.Stream inStream = conn.InputStream; System.IO.Stream newIn = new SecureStream (inStream, krb5Helper); System.IO.Stream outStream = conn.OutputStream; System.IO.Stream newOut = new SecureStream (outStream, krb5Helper); conn.ReplaceStreams (newIn,newOut); } }
private void UpdateLoginStatus(LoginStatus status, string message) { InternalStatusCode = status; InternalLoginMessage = message; Client.DebugLog("Login status: " + status.ToString() + ": " + message); if (OnLogin != null) { try { OnLogin(status, message); } catch (Exception e) { Client.Log(e.ToString(), Helpers.LogLevel.Error); } } if (status == LoginStatus.Success || status == LoginStatus.Failed) { CurrentContext = null; LoginEvent.Set(); } }
public void BeginLogin(LoginParams loginParams) { if (CurrentContext != null) throw new Exception("Login already in progress"); LoginEvent.Reset(); CurrentContext = new LoginContext(); CurrentContext.Params = loginParams; BeginLogin(); }
/// <summary> /// Login that takes a struct of all the values that will be passed to /// the login server /// </summary> /// <param name="loginParams">The values that will be passed to the login /// server, all fields must be set even if they are String.Empty</param> /// <returns>Whether the login was successful or not. On failure the /// LoginErrorKey string will contain the error code and LoginMessage /// will contain a description of the error</returns> public bool Login(LoginParams loginParams) { BeginLogin(loginParams); LoginEvent.WaitOne(loginParams.Timeout, false); if (CurrentContext != null) { CurrentContext = null; // Will force any pending callbacks to bail out early InternalStatusCode = LoginStatus.Failed; InternalLoginMessage = "Timed out"; return false; } return (InternalStatusCode == LoginStatus.Success); }
private void LoginResponseCallback(IAsyncResult result) { LoginContext myContext = result.AsyncState as LoginContext; if (myContext == null) return; lock (LockObject) { HttpWebResponse response = null; Stream xmlStream = null; XmlTextReader reader = null; try { if (myContext != CurrentContext) { if (myContext.Request != null) { myContext.Request.Abort(); myContext.Request = null; } return; } response = (HttpWebResponse)myContext.Request.EndGetResponse(result); xmlStream = response.GetResponseStream(); MemoryStream memStream = new MemoryStream(); BinaryReader streamReader = new BinaryReader(xmlStream); BinaryWriter streamWriter = new BinaryWriter(memStream); // Put the entire response in to a byte array byte[] buffer; while ((buffer = streamReader.ReadBytes(1024)) != null) { if (buffer.Length == 0) break; streamWriter.Write(buffer); } streamWriter.Flush(); xmlStream.Close(); // Write the entire memory stream out to a byte array buffer = memStream.ToArray(); // Reset the position in the stream to the beginning memStream.Seek(0, SeekOrigin.Begin); // The memory stream will become an XML stream shortly xmlStream = memStream; InternalRawLoginReply = Encoding.UTF8.GetString(buffer); //reader = XmlReader.Create(xmlStream); reader = new XmlTextReader(xmlStream); // Parse the incoming xml bool redirect = false; string nextURL = String.Empty; string nextMethod = String.Empty; string name, value; IPAddress simIP = IPAddress.Loopback; ushort simPort = 0; bool loginSuccess = false; string reason = String.Empty; string message = String.Empty; reader.ReadStartElement("methodResponse"); if (!reader.IsStartElement("fault")) { #region XML Parsing reader.ReadStartElement("params"); reader.ReadStartElement("param"); reader.ReadStartElement("value"); reader.ReadStartElement("struct"); while (reader.IsStartElement("member")) { reader.ReadStartElement("member"); name = reader.ReadElementString("name"); switch (name) { case "login": value = ReadStringValue(reader); if (value == "indeterminate") redirect = true; else if (value == "true") loginSuccess = true; break; case "reason": reason = ReadStringValue(reader); InternalErrorKey = reason; break; case "agent_id": LLUUID.TryParse(ReadStringValue(reader), out Client.Network.AgentID); Client.Self.ID = Client.Network.AgentID; break; case "session_id": LLUUID.TryParse(ReadStringValue(reader), out Client.Network.SessionID); break; case "secure_session_id": LLUUID.TryParse(ReadStringValue(reader), out Client.Network.SecureSessionID); break; case "circuit_code": Client.Network.CircuitCode = (uint)ReadIntegerValue(reader); break; case "first_name": Client.Self.FirstName = ReadStringValue(reader).Trim(new char[] { '"' }); break; case "last_name": Client.Self.LastName = ReadStringValue(reader).Trim(new char[] { '"' }); break; case "start_location": Client.Self.StartLocation = ReadStringValue(reader); break; case "look_at": ArrayList look_at = (ArrayList)LLSD.ParseTerseLLSD(ReadStringValue(reader)); Client.Self.LookAt = new LLVector3( (float)(double)look_at[0], (float)(double)look_at[1], (float)(double)look_at[2]); break; case "home": Hashtable home = (Hashtable)LLSD.ParseTerseLLSD(ReadStringValue(reader)); ArrayList array = (ArrayList)home["position"]; Client.Self.HomePosition = new LLVector3( (float)(double)array[0], (float)(double)array[1], (float)(double)array[2]); array = (ArrayList)home["look_at"]; Client.Self.HomeLookAt = new LLVector3( (float)(double)array[0], (float)(double)array[1], (float)(double)array[2]); break; case "agent_access": Client.Self.AgentAccess = ReadStringValue(reader); break; case "message": message = ReadStringValue(reader); break; case "region_x": //FIXME: int regionX = ReadIntegerValue(reader); break; case "region_y": // FIXME: int regionY = ReadIntegerValue(reader); break; case "sim_port": simPort = (ushort)ReadIntegerValue(reader); break; case "sim_ip": IPAddress.TryParse(ReadStringValue(reader), out simIP); break; case "seconds_since_epoch": uint timestamp = (uint)ReadIntegerValue(reader); DateTime time = Helpers.UnixTimeToDateTime(timestamp); // FIXME: ??? break; case "seed_capability": LoginSeedCapability = ReadStringValue(reader); break; case "inventory-root": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); reader.ReadStartElement("value"); reader.ReadStartElement("struct"); ReadStringMember(reader, out name, out value); LLUUID.TryParse(value, out Client.Self.InventoryRootFolderUUID); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "inventory-lib-root": reader.ReadStartElement("value"); // Fix this later reader.Skip(); //reader.ReadStartElement("array"); //reader.ReadStartElement("data"); //reader.ReadStartElement("value"); //reader.ReadStartElement("struct"); //ReadStringMember(reader, out name, out value); // FIXME: //LLUUID.TryParse(value, out Client.Self.InventoryLibRootFolderUUID); //reader.ReadEndElement(); //reader.ReadEndElement(); //reader.ReadEndElement(); //reader.ReadEndElement(); reader.ReadEndElement(); break; case "inventory-lib-owner": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); reader.ReadStartElement("value"); reader.ReadStartElement("struct"); ReadStringMember(reader, out name, out value); // FIXME: //LLUUID.TryParse(value, out Client.Self.InventoryLibOwnerUUID); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "inventory-skeleton": { reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); int typeDefault, version; string invName; LLUUID folderID, parentID; while (ReadInventoryMember(reader, out typeDefault, out version, out invName, out folderID, out parentID)) { // FIXME: } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; } case "inventory-skel-lib": { reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); int typeDefault, version; string invName; LLUUID folderID, parentID; while (ReadInventoryMember(reader, out typeDefault, out version, out invName, out folderID, out parentID)) { // FIXME: } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; } case "gestures": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); while (reader.IsStartElement("value")) { reader.ReadStartElement("value"); reader.ReadStartElement("struct"); while (ReadStringMember(reader, out name, out value)) { switch (name) { case "asset_id": // FIXME: break; case "item_id": // FIXME: break; default: Client.Log("Unhandled element in login reply (gestures)", Helpers.LogLevel.Error); reader.Skip(); break; } // FIXME: } reader.ReadEndElement(); reader.ReadEndElement(); } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "event_categories": { reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); int categoryID; string categoryName; while (ReadCategoryMember(Client, reader, out categoryID, out categoryName)) { // FIXME: } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; } case "classified_categories": { reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); int categoryID; string categoryName; while (ReadCategoryMember(Client, reader, out categoryID, out categoryName)) { // FIXME: } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; } case "event_notifications": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); // FIXME: reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "buddy-list": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); int buddyRightsGiven, buddyRightsHas; LLUUID buddyID; while (ReadBuddyMember(Client, reader, out buddyRightsGiven, out buddyRightsHas, out buddyID)) { // FIXME: } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "ui-config": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); reader.ReadStartElement("value"); reader.ReadStartElement("struct"); while (ReadStringMember(reader, out name, out value)) { switch (name) { case "allow_first_life": // FIXME: break; default: Client.Log("Unhandled element in login reply (ui-config)", Helpers.LogLevel.Error); reader.Skip(); break; } } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "login-flags": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); reader.ReadStartElement("value"); reader.ReadStartElement("struct"); while (ReadStringMember(reader, out name, out value)) { switch (name) { case "ever_logged_in": // FIXME: break; case "daylight_savings": // FIXME: break; case "stipend_since_login": // FIXME: break; case "gendered": // FIXME: break; default: Client.Log("Unhandled element in login reply (login-flags)", Helpers.LogLevel.Error); reader.Skip(); break; } } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "global-textures": reader.ReadStartElement("value"); reader.ReadStartElement("array"); reader.ReadStartElement("data"); reader.ReadStartElement("value"); reader.ReadStartElement("struct"); while (ReadStringMember(reader, out name, out value)) { switch (name) { case "cloud_texture_id": // FIXME: break; case "sun_texture_id": // FIXME: break; case "moon_texture_id": // FIXME: break; default: Client.Log("Unhandled element in login reply (global-textures)", Helpers.LogLevel.Error); reader.Skip(); break; } } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); break; case "next_options": // FIXME: Parse the next_options and only use those for the next_url reader.Skip(); break; case "next_duration": // FIXME: Use this value as the timeout for the next request reader.Skip(); break; case "next_url": nextURL = ReadStringValue(reader); break; case "next_method": nextMethod = ReadStringValue(reader); break; default: Client.Log("Unhandled element in login reply", Helpers.LogLevel.Error); reader.Skip(); break; } reader.ReadEndElement(); } reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); reader.ReadEndElement(); #endregion XML Parsing if (redirect) { UpdateLoginStatus(LoginStatus.Redirecting, "Redirecting login..."); // Handle indeterminate logins CurrentContext = new LoginContext(); CurrentContext.Params = myContext.Params; CurrentContext.Params.URI = nextURL; CurrentContext.Params.MethodName = nextMethod; BeginLogin(); } else if (loginSuccess) { UpdateLoginStatus(LoginStatus.ConnectingToSim, "Connecting to simulator..."); // Connect to the sim given in the login reply if (Connect(simIP, simPort, true, LoginSeedCapability) != null) { // Request the economy data right after login SendPacket(new EconomyDataRequestPacket()); // Update the login message with the MOTD returned from the server UpdateLoginStatus(LoginStatus.Success, message); // Fire an event for connecting to the grid if (OnConnected != null) { try { OnConnected(this.Client); } catch (Exception e) { Client.Log(e.ToString(), Helpers.LogLevel.Error); } } } else { UpdateLoginStatus(LoginStatus.Failed, "Unable to connect to simulator"); } } else { // Make sure a usable error key is set if (!String.IsNullOrEmpty(reason)) InternalErrorKey = reason; else InternalErrorKey = "unknown"; UpdateLoginStatus(LoginStatus.Failed, message); } } else { reader.ReadStartElement("fault"); reader.ReadStartElement("value"); reader.ReadStartElement("struct"); ReadStringMember(reader, out name, out value); UpdateLoginStatus(LoginStatus.Failed, value); } } catch (WebException e) { UpdateLoginStatus(LoginStatus.Failed, "Error reading response: " + e.Message); } catch (XmlException e) { UpdateLoginStatus(LoginStatus.Failed, "Error parsing reply XML: " + e.Message + Environment.NewLine + e.StackTrace); } finally { if (reader != null) reader.Close(); if (xmlStream != null) xmlStream.Close(); if (response != null) response.Close(); } } }
private async Task SendStartRequest(LoginContext loginContext) { var res = await Send(new HttpRequestMessage(HttpMethod.Get, BaseUrl + "?ns=1")); var content = await res.Content.ReadAsStringAsync(); var doc = new HtmlDocument(); doc.LoadHtml(content); loginContext.StartAuthId = doc.DocumentNode.SelectSingleNode("//input[@name='authid']").GetAttributeValue("value", ""); }
private async Task SendFirstActionRequest(LoginContext loginContext) { var req = new HttpRequestMessage(HttpMethod.Post, FirstLoginActionUrl) { Content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("execution", "e1s1"), new KeyValuePair<string, string>("dapPortalWindowId", "dap1"), new KeyValuePair<string, string>("locale", "sv_SE"), new KeyValuePair<string, string>("IntId", "dap1"), new KeyValuePair<string, string>("authid", ""), new KeyValuePair<string, string>("form1:fortsett_knapp", "klicka"), new KeyValuePair<string, string>("form1_SUBMIT", "1"), new KeyValuePair<string, string>("javax.faces.ViewState", loginContext.ViewStateForSecondRequest) }) }; await Send(req); }
/// <summary> /// Login that takes a struct of all the values that will be passed to /// the login server /// </summary> /// <param name="loginParams">The values that will be passed to the login /// server, all fields must be set even if they are String.Empty</param> /// <returns>Whether the login was successful or not. On failure the /// LoginErrorKey string will contain the error code and LoginMessage /// will contain a description of the error</returns> public bool Login(LoginParams loginParams) { BeginLogin(loginParams); LoginEvent.WaitOne(loginParams.Timeout, false); lock (LockObject) { if (CurrentContext != null) { if (CurrentContext.Request != null) CurrentContext.Request.Abort(); CurrentContext = null; // Will force any pending callbacks to bail out early InternalStatusCode = LoginStatus.Failed; InternalLoginMessage = "Timed out"; return false; } if (InternalStatusCode != LoginStatus.Success) return false; } return true; }
private async Task<HttpResponseMessage> Login() { var context = new LoginContext(); await SendStartRequest(context); await SendIdpRequest(context); await SendFirstActionRequest(context); await SendSecondActionRequest(); await SendThirdActionRequest(); await SendFourthRequest(); await SendFifthRequest(context); var req = new HttpRequestMessage(HttpMethod.Post, LandingPageUrl) { Content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("dapPortalWindowId", "dap1"), new KeyValuePair<string, string>("locale", "sv_SE"), new KeyValuePair<string, string>("IntId1", "dap1"), new KeyValuePair<string, string>("authid", context.LoginAuthId) }) }; return await Send(req); }
private async Task SendIdpRequest(LoginContext loginContext) { var req = new HttpRequestMessage(HttpMethod.Post, IdpUrl) { Content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("authid", loginContext.StartAuthId) }) }; var res = await Send(req); var content = await res.Content.ReadAsStringAsync(); var doc = new HtmlDocument(); doc.LoadHtml(content); loginContext.ViewStateForSecondRequest = doc.DocumentNode.SelectSingleNode("//input[@name='javax.faces.ViewState']").GetAttributeValue("value", ""); }
private async Task SendFourthRequest(LoginContext loginContext) { var req = new HttpRequestMessage(HttpMethod.Get, FourthLoginRequestUrl); req.Headers.Referrer = new Uri(ThirdLoginActionUrl); var res = await Send(req); var content = await res.Content.ReadAsStringAsync(); var doc = new HtmlDocument(); doc.LoadHtml(content); var authId = doc.DocumentNode.SelectSingleNode("//input[@name='authid']"); if (authId != null) { loginContext.LoginAuthId = doc.DocumentNode.SelectSingleNode("//input[@name='authid']") .GetAttributeValue("value", ""); } }
private async Task SendFifthRequest(LoginContext context) { var res = await Send(new HttpRequestMessage(HttpMethod.Get, FifthLoginRequestUrl)); string content = await res.Content.ReadAsStringAsync(); var doc = new HtmlDocument(); doc.LoadHtml(content); var authId = doc.DocumentNode.SelectSingleNode("//input[@name='authid']"); if (authId != null) { context.LoginAuthId = doc.DocumentNode.SelectSingleNode("//input[@name='authid']").GetAttributeValue("value", ""); } }