internal Uri AppendTokenToURL(string request, string resourceID, PNResourceType resourceType, PNOperationType type)
        {
            string        token      = GetToken(resourceID, resourceType);
            StringBuilder uriBuilder = new StringBuilder(request);

            if (!string.IsNullOrEmpty(token))
            {
                uriBuilder.AppendFormat("&auth={0}", Utility.EncodeUricomponent(token, type, false, false));
            }
            else
            {
                if (!string.IsNullOrEmpty(this.PubNubInstance.PNConfig.AuthKey))
                {
                    uriBuilder.AppendFormat("&auth={0}", Utility.EncodeUricomponent(this.PubNubInstance.PNConfig.AuthKey, type, false, false));
                }
            }

            return(new Uri(uriBuilder.ToString()));
        }
        public GrantResourcesWithPermissions GetTokensByResource(PNResourceType resourceType)
        {
            GrantResourcesWithPermissions grantResourcesWithPermissions = InitGrantResourcesWithPermissions();

            switch (resourceType)
            {
            case PNResourceType.PNChannels:
                grantResourcesWithPermissions.Channels        = Tokens.Channels;
                grantResourcesWithPermissions.ChannelsPattern = Tokens.ChannelsPattern;
                break;

            case PNResourceType.PNGroups:
                grantResourcesWithPermissions.Groups        = Tokens.Groups;
                grantResourcesWithPermissions.GroupsPattern = Tokens.GroupsPattern;
                break;

            case PNResourceType.PNSpaces:
                grantResourcesWithPermissions.Spaces        = Tokens.Spaces;
                grantResourcesWithPermissions.SpacesPattern = Tokens.SpacesPattern;
                break;

            case PNResourceType.PNUsers:
                grantResourcesWithPermissions.Users        = Tokens.Users;
                grantResourcesWithPermissions.UsersPattern = Tokens.UsersPattern;
                break;

            default:
                #if (ENABLE_PUBNUB_LOGGING)
                this.PubNubInstance.PNLog.WriteToLog(string.Format("No match on GetTokensByResource: {0}", resourceType), PNLoggingMethod.LevelInfo);
                #endif

                break;
            }

            return(grantResourcesWithPermissions);
        }
Пример #3
0
 public string GetToken(string resourceID, PNResourceType resourceType)
 {
     PubNubUnityInitializationAfterCleanup();
     return(pnUnity.TokenMgr.GetToken(resourceID, resourceType));
 }
Пример #4
0
 public GrantResourcesWithPermissions GetTokensByResource(PNResourceType resourceType)
 {
     PubNubUnityInitializationAfterCleanup();
     return(pnUnity.TokenMgr.GetTokensByResource(resourceType));
 }
        public void FillGrantResourcesWithPermissions(Dictionary <string, int> resDict, string token, long timetoken, int ttl, bool isPattern, PNResourceType pnResourceType)
        {
            if ((resDict != null) && (resDict.Count > 0))
            {
                foreach (KeyValuePair <string, int> kvp in resDict)
                {
                    #if (ENABLE_PUBNUB_LOGGING)
                    this.PubNubInstance.PNLog.WriteToLog(string.Format("FillGrantResourcesWithPermissions ==> {0}", kvp.Key), PNLoggingMethod.LevelInfo);
                    #endif

                    switch (pnResourceType)
                    {
                    case PNResourceType.PNChannels:
                        ChannelPermissionsWithToken channelPermissionsWithToken = new ChannelPermissionsWithToken {
                            BitMaskPerms = kvp.Value,
                            Token        = token,
                            Timestamp    = timetoken,
                            TTL          = ttl,
                            Permissions  = ParseGrantPrems(kvp.Value, pnResourceType) as ChannelPermissions,
                        };
                        if (isPattern)
                        {
                            Tokens.ChannelsPattern[kvp.Key] = channelPermissionsWithToken;
                        }
                        else
                        {
                            Tokens.Channels[kvp.Key] = channelPermissionsWithToken;
                        }

                        break;

                    case PNResourceType.PNGroups:
                        GroupPermissionsWithToken groupPermissionsWithToken = new GroupPermissionsWithToken {
                            BitMaskPerms = kvp.Value,
                            Token        = token,
                            Timestamp    = timetoken,
                            TTL          = ttl,
                            Permissions  = ParseGrantPrems(kvp.Value, pnResourceType) as GroupPermissions,
                        };
                        if (isPattern)
                        {
                            Tokens.GroupsPattern[kvp.Key] = groupPermissionsWithToken;
                        }
                        else
                        {
                            Tokens.Groups[kvp.Key] = groupPermissionsWithToken;
                        }
                        break;

                    case PNResourceType.PNSpaces:
                        UserSpacePermissionsWithToken spacePermissionsWithToken = new UserSpacePermissionsWithToken {
                            BitMaskPerms = kvp.Value,
                            Token        = token,
                            Timestamp    = timetoken,
                            TTL          = ttl,
                            Permissions  = ParseGrantPrems(kvp.Value, pnResourceType) as UserSpacePermissions,
                        };
                        if (isPattern)
                        {
                            Tokens.SpacesPattern[kvp.Key] = spacePermissionsWithToken;
                        }
                        else
                        {
                            Tokens.Spaces[kvp.Key] = spacePermissionsWithToken;
                        }
                        break;

                    case PNResourceType.PNUsers:
                        UserSpacePermissionsWithToken userPermissionsWithToken = new UserSpacePermissionsWithToken {
                            BitMaskPerms = kvp.Value,
                            Token        = token,
                            Timestamp    = timetoken,
                            TTL          = ttl,
                            Permissions  = ParseGrantPrems(kvp.Value, pnResourceType) as UserSpacePermissions,
                        };
                        if (isPattern)
                        {
                            Tokens.UsersPattern[kvp.Key] = userPermissionsWithToken;
                        }
                        else
                        {
                            Tokens.Users[kvp.Key] = userPermissionsWithToken;
                        }
                        break;

                    default:
                        #if (ENABLE_PUBNUB_LOGGING)
                        this.PubNubInstance.PNLog.WriteToLog(string.Format("No match on FillGrantResourcesWithPermissions: {0}", pnResourceType), PNLoggingMethod.LevelInfo);
                        #endif

                        break;
                    }
                }
            }
        }
        public ResourcePermission ParseGrantPrems(int b, PNResourceType pnResourceType)
        {
            UserSpacePermissions rp = new UserSpacePermissions {
                Read   = false,
                Write  = false,
                Manage = false,
                Delete = false,
                Create = false,
            };
            string bits = Convert.ToString(b, 2);

            #if (ENABLE_PUBNUB_LOGGING)
            this.PubNubInstance.PNLog.WriteToLog("binary==>" + bits, PNLoggingMethod.LevelInfo);
            #endif

            for (int i = 0; i < bits.Length; i++)
            {
                #if (ENABLE_PUBNUB_LOGGING)
                this.PubNubInstance.PNLog.WriteToLog(string.Format("{0}-{1}", i, bits[i]), PNLoggingMethod.LevelInfo);
                #endif
                switch (i)
                {
                case 0:
                    rp.Read = (bits[i] == '1');
                    break;

                case 1:
                    rp.Write = (bits[i] == '1');
                    break;

                case 2:
                    rp.Manage = (bits[i] == '1');
                    break;

                case 3:
                    rp.Delete = (bits[i] == '1');
                    break;

                case 4:
                    rp.Create = (bits[i] == '1');
                    break;

                default:
                    #if (ENABLE_PUBNUB_LOGGING)
                    this.PubNubInstance.PNLog.WriteToLog(string.Format("No match on ParseGrantPrems: {0}", i), PNLoggingMethod.LevelInfo);
                    #endif

                    break;
                }
            }
            #if (ENABLE_PUBNUB_LOGGING)
            StringBuilder sbLog = new StringBuilder();
            sbLog.AppendFormat("ResourcePermissions Read ==> {0}", rp.Read);
            sbLog.AppendFormat("ResourcePermissions Write ==> {0}", rp.Write);
            sbLog.AppendFormat("ResourcePermissions Manage ==> {0}", rp.Manage);
            sbLog.AppendFormat("ResourcePermissions Delete ==> {0}", rp.Delete);
            sbLog.AppendFormat("ResourcePermissions Create ==> {0}", rp.Create);
            this.PubNubInstance.PNLog.WriteToLog(sbLog.ToString(), PNLoggingMethod.LevelInfo);
            #endif
            return(rp);
        }
        // GetToken first match for direct ids, if no match found use the first token from pattern match ignoring the regex (by design).
        public string GetToken(string resourceID, PNResourceType resourceType)
        {
            switch (resourceType)
            {
            case PNResourceType.PNChannels:
                ChannelPermissionsWithToken channelPermissionsWithToken;
                if (Tokens.Channels.TryGetValue(resourceID, out channelPermissionsWithToken))
                {
                    return(channelPermissionsWithToken.Token);
                }
                if ((Tokens.ChannelsPattern != null) && (Tokens.ChannelsPattern.Count > 0))
                {
                    return(Tokens.ChannelsPattern.First().Value.Token);
                }
                return("");

            case PNResourceType.PNGroups:
                GroupPermissionsWithToken groupPermissionsWithToken;
                if (Tokens.Groups.TryGetValue(resourceID, out groupPermissionsWithToken))
                {
                    return(groupPermissionsWithToken.Token);
                }
                if ((Tokens.GroupsPattern != null) && (Tokens.GroupsPattern.Count > 0))
                {
                    return(Tokens.GroupsPattern.First().Value.Token);
                }
                return("");

            case PNResourceType.PNSpaces:
                UserSpacePermissionsWithToken spacePermissionsWithToken;
                if (Tokens.Spaces.TryGetValue(resourceID, out spacePermissionsWithToken))
                {
                    return(spacePermissionsWithToken.Token);
                }
                if ((Tokens.SpacesPattern != null) && (Tokens.SpacesPattern.Count > 0))
                {
                    return(Tokens.SpacesPattern.First().Value.Token);
                }
                return("");

            case PNResourceType.PNUsers:
                UserSpacePermissionsWithToken userPermissionsWithToken;
                if (Tokens.Users.TryGetValue(resourceID, out userPermissionsWithToken))
                {
                    return(userPermissionsWithToken.Token);
                }
                if ((Tokens.UsersPattern != null) && (Tokens.UsersPattern.Count > 0))
                {
                    return(Tokens.UsersPattern.First().Value.Token);
                }
                return("");

            default:
                #if (ENABLE_PUBNUB_LOGGING)
                this.PubNubInstance.PNLog.WriteToLog(string.Format("No match on GetToken: {0}", resourceType), PNLoggingMethod.LevelInfo);
                #endif

                break;
            }
            return("");
        }