Exemplo n.º 1
0
        protected virtual void OnPlayerDisconnected(SteamPlayer player)
        {
            var user = GetUser(player);

            if (user == null)
            {
                return;
            }

            if (user.Session is UnturnedUserSession session)
            {
                session.OnSessionEnd();
            }

            AsyncHelper.RunSync(async() =>
            {
                var disconnectedEvent = new UserDisconnectedEvent(user);
                await m_EventBus.EmitAsync(m_Runtime, this, disconnectedEvent);

                m_UnturnedUsers.Remove(user);

                var userData = await m_UserDataStore.GetUserDataAsync(user.Id, user.Type);
                if (userData == null)
                {
                    return;
                }

                userData.LastSeen = DateTime.Now;
                await m_UserDataStore.SaveUserDataAsync(userData);
            });
        }
        public virtual async Task <bool> AddRoleToActorAsync(IPermissionActor actor, string roleId)
        {
            var userData = await m_UserDataStore.GetUserDataAsync(actor.Id, actor.Type);

            if (userData.Roles.Contains(roleId))
            {
                return(true);
            }

            userData.Roles.Add(roleId);
            await m_UserDataStore.SaveUserDataAsync(userData);

            return(true);
        }
Exemplo n.º 3
0
        public async Task SeedUserDataAsync(string actorId, string actorType, string displayName, Dictionary <string, object> data = null)
        {
            var userData = await m_UserDataStore.GetUserDataAsync(actorId, actorType);

            if (userData != null)
            {
                return; // no seeding
            }

            var autoAssignRoles = new HashSet <string>(await m_PermissionRoleStore.GetAutoAssignedRolesAsync(actorId, actorType));

            userData = new UserData
            {
                Data            = data ?? new Dictionary <string, object>(),
                Id              = actorId,
                Type            = actorType,
                LastSeen        = DateTime.Now,
                FirstSeen       = DateTime.Now,
                Permissions     = new HashSet <string>(),
                Roles           = autoAssignRoles,
                LastDisplayName = displayName
            };

            await m_UserDataStore.SaveUserDataAsync(userData);
        }
Exemplo n.º 4
0
        protected virtual void OnPendingPlayerConnected(ValidateAuthTicketResponse_t callback, ref bool isvalid, ref string explanation)
        {
            var isvalid_     = isvalid;
            var explanation_ = explanation;

            AsyncHelper.RunSync(async() =>
            {
                if (!isvalid_)
                {
                    return;
                }

                var steamPending = Provider.pending.First(d => d.playerID.steamID == callback.m_SteamID);
                var pendingUser  = new UnturnedPendingUser(steamPending);
                await m_DataSeeder.SeedUserDataAsync(pendingUser.Id, pendingUser.Type, pendingUser.DisplayName);

                var userData             = await m_UserDataStore.GetUserDataAsync(pendingUser.Type, pendingUser.Id);
                userData.LastSeen        = DateTime.Now;
                userData.LastDisplayName = pendingUser.DisplayName;
                await m_UserDataStore.SaveUserDataAsync(userData);

                pendingUser.PersistentData = userData.Data;
                m_PendingUsers.Add(pendingUser);

                var userConnectingEvent = new UserConnectingEvent(pendingUser);
                await m_EventBus.EmitAsync(m_Runtime, this, userConnectingEvent);

                if (!string.IsNullOrEmpty(userConnectingEvent.RejectionReason))
                {
                    isvalid_     = false;
                    explanation_ = userConnectingEvent.RejectionReason;
                }

                if (userConnectingEvent.IsCancelled)
                {
                    isvalid_ = false;
                }
            });

            isvalid     = isvalid_;
            explanation = explanation_;
        }
Exemplo n.º 5
0
        public virtual async Task <bool> AddGrantedPermissionAsync(IPermissionActor actor, string permission)
        {
            if (actor is IPermissionRole)
            {
                var roleData = m_PermissionRolesDataStore.Roles.First(d => d.Id.Equals(actor.Id, StringComparison.OrdinalIgnoreCase));
                if (roleData == null)
                {
                    return(false);
                }

                roleData.Permissions.Add(permission);
                await m_PermissionRolesDataStore.SaveChangesAsync();

                return(true);
            }

            var userData = await m_UserDataStore.GetUserDataAsync(actor.Id, actor.Type);

            userData.Permissions.Add(permission);
            await m_UserDataStore.SaveUserDataAsync(userData);

            return(true);
        }
Exemplo n.º 6
0
        public async Task SavePersistentDataAsync <T>(string key, T data)
        {
            var userData = await m_UserDataStore.GetUserDataAsync(Id, Type);

            userData.Data ??= new Dictionary <string, object>();
            if (userData.Data.ContainsKey(key))
            {
                userData.Data[key] = data;
            }
            else
            {
                userData.Data.Add(key, data);
            }

            await m_UserDataStore.SaveUserDataAsync(userData);
        }