public void RegisterNewUser(ButtonClickEvent e, SingleNode <FinishRegistrationButtonComponent> node, [JoinByScreen] SingleNode <RegistrationScreenComponent> screen, [JoinAll] SecuredClientSessionNode clientSession, [JoinByUser] Optional <SingleNode <UserIncompleteRegistrationComponent> > user, [JoinAll] Optional <SingleNode <SteamMarkerComponent> > steam, [JoinAll] Optional <SubscribeCheckboxNode> subscribeCheckbox) { RegistrationScreenComponent component = screen.component; byte[] digest = PasswordSecurityUtils.GetDigest(component.Password); RequestRegisterUserEvent eventInstance = new RequestRegisterUserEvent { Uid = component.Uid, HardwareFingerprint = HardwareFingerprintUtils.HardwareFingerprint, EncryptedPasswordDigest = PasswordSecurityUtils.RSAEncryptAsString(clientSession.sessionSecurityPublic.PublicKey, digest), Email = component.Email, Steam = steam.IsPresent(), Subscribed = !subscribeCheckbox.IsPresent() || subscribeCheckbox.Get().checkbox.IsChecked }; EventBuilder builder = base.NewEvent(eventInstance).Attach(clientSession); if (user.IsPresent()) { builder.Attach(user.Get()); } builder.Schedule(); clientSession.Entity.AddComponent(new AutoLoginTokenAwaitingComponent(digest)); screen.component.LockScreen(true); }