示例#1
0
        public async Task TestUpdateAuthAsync()
        {
            string token = await Utils.GetTestToken();

            string  authResponsePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ApiResults", "ValidAuthResponse.json");
            string  authResponse     = File.ReadAllText(authResponsePath);
            string  testResultPath   = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ApiResults", "GetTokenSuccessResult.json");
            string  json             = File.ReadAllText(testResultPath);
            JObject jObject          = JObject.Parse(json);

            jObject["access_token"] = token;
            json = JsonConvert.SerializeObject(jObject);
            Guid clientId = Guid.NewGuid();
            var  mocks    = Utils.CreateDefaultGraphApiMock(json);
            await Utils.SetOneValueDbContextAsync(clientId);

            BotDbContext    db = Utils.CreateMemoryDbContext();
            DefaultGraphApi defaultGraphApi = new DefaultGraphApi(db, mocks.Item1, mocks.Item2);
            Guid            authId          = (await db.AppAuths.AsQueryable().FirstAsync(item => item.AzureAppId == clientId)).Id;

            BindHandler bindHandler = new BindHandler(db, defaultGraphApi);
            await bindHandler.UpdateAuthAsync(authId.ToString(), authResponse);

            await db.DisposeAsync();

            db = Utils.CreateMemoryDbContext();
            Assert.AreEqual(1, await db.AppAuths.AsQueryable().CountAsync());
            Assert.IsTrue(await db.AppAuths.AsQueryable().AnyAsync(appAuth => appAuth.Id == authId && appAuth.RefreshToken == jObject["refresh_token"].ToString()));
        }
示例#2
0
        public async Task TestRegAppAsync()
        {
            string          testResultPath  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ApiResults", "ValidApplicationResult.json");
            string          json            = File.ReadAllText(testResultPath);
            var             mocks           = Utils.CreateDefaultGraphApiMock(json);
            BotDbContext    db              = Utils.CreateMemoryDbContext();
            DefaultGraphApi defaultGraphApi = new DefaultGraphApi(db, mocks.Item1, mocks.Item2);

            BindHandler bindHandler = new BindHandler(db, defaultGraphApi);

            long   userId       = 123456;
            string userName     = "******";
            string email        = "*****@*****.**";
            Guid   clientId     = Guid.NewGuid();
            string clientSecret = "741852963";
            string appName      = "app1";

            await bindHandler.RegAppAsync(userId, userName, email, clientId.ToString(), clientSecret, appName);

            await db.DisposeAsync();

            db = Utils.CreateMemoryDbContext();
            AzureApp azureApp = await db.AzureApps.Include(azureApp => azureApp.TelegramUser).FirstAsync();

            Assert.AreEqual(userId, azureApp.TelegramUserId);
            Assert.AreEqual(userName, azureApp.TelegramUser.UserName);
            Assert.AreEqual(email, azureApp.Email);
            Assert.AreEqual(clientId, azureApp.Id);
            Assert.AreEqual(clientSecret, azureApp.Secrets);
            Assert.AreEqual(appName, azureApp.Name);
        }
示例#3
0
        public override Task <IProxyServerBindHandler> GetBindHandlerAsync(AddressFamily family)
        {
            IPEndPoint bindEP = GetBindEP(family);
            IProxyServerBindHandler bindHandler = new BindHandler(bindEP);

            return(Task.FromResult(bindHandler));
        }
 //属性绑定,setter是从绑定源复制数据到目标的代码
 //例子:BindProperty(() => obj2.a = obj1.a),表示obj2.a永远等于obj1.a
 //必须保证obj2是一个局部变量而不是属性
 public BindHandler BindProperty(Action setter)
 {
     BindAction(e => setter());
     Instance = this;
     setter.Invoke();
     Instance = null;
     return(this);
 }
    private T AddExpressionListener <T>(Func <T> expression)
    {
        Instance = this;
        var result = expression.Invoke();

        Instance = null;
        return(result);
    }
示例#6
0
        public async Task TestUpdateAuthInvalidAuthAsync()
        {
            string authResponsePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ApiResults", "InvalidAuthResponse.json");
            string authResponse     = File.ReadAllText(authResponsePath);

            BindHandler bindHandler = new BindHandler(null, null);
            await bindHandler.UpdateAuthAsync(Guid.Empty.ToString(), authResponse);
        }
        public override Task <IProxyServerBindHandler> GetBindHandlerAsync(AddressFamily family)
        {
            if (_bindEP.AddressFamily != family)
            {
                throw new SocketException((int)SocketError.NetworkUnreachable);
            }

            IProxyServerBindHandler bindHandler = new BindHandler(_bindEP, _bindToInterfaceName);

            return(Task.FromResult(bindHandler));
        }
示例#8
0
        public async Task TestGetAuthUrlAsyncEmailNotExist()
        {
            Guid            clientId        = Guid.NewGuid();
            var             mocks           = Utils.CreateDefaultGraphApiMock(string.Empty);
            BotDbContext    db              = Utils.CreateMemoryDbContext();
            DefaultGraphApi defaultGraphApi = new DefaultGraphApi(db, mocks.Item1, mocks.Item2);

            BindHandler bindHandler = new BindHandler(db, defaultGraphApi);

            (string, string)_ = await bindHandler.GetAuthUrlAsync(clientId.ToString());
        }
示例#9
0
        public async Task TestDeleteNotExistAppAsync()
        {
            await Utils.SetDefaultValueDbContextAsync();

            BotDbContext db        = Utils.CreateMemoryDbContext();
            Guid         clientId1 = Guid.NewGuid();
            await db.DisposeAsync();

            db = Utils.CreateMemoryDbContext();

            BindHandler bindHandler = new BindHandler(db, null);
            string      _           = await bindHandler.DeleteAppAsync(clientId1.ToString());
        }
示例#10
0
        public async Task TestUnbindNotExistAuthAsync()
        {
            await Utils.SetDefaultValueDbContextAsync();

            BotDbContext db      = Utils.CreateMemoryDbContext();
            Guid         authId1 = Guid.NewGuid();
            await db.DisposeAsync();

            db = Utils.CreateMemoryDbContext();

            BindHandler bindHandler = new BindHandler(db, null);
            await bindHandler.UnbindAuthAsync(authId1.ToString());
        }
示例#11
0
        public async Task TestUnbindAuthAsync()
        {
            await Utils.SetDefaultValueDbContextAsync();

            BotDbContext db      = Utils.CreateMemoryDbContext();
            Guid         authId1 = await db.AppAuths.AsQueryable().Select(app => app.Id).FirstAsync();

            await db.DisposeAsync();

            db = Utils.CreateMemoryDbContext();

            BindHandler bindHandler = new BindHandler(db, null);
            await bindHandler.UnbindAuthAsync(authId1.ToString());

            Assert.AreEqual(await db.AppAuths.AsQueryable().CountAsync(), 1);
        }
示例#12
0
        public async Task TestDeleteAppAsync()
        {
            await Utils.SetDefaultValueDbContextAsync();

            BotDbContext db        = Utils.CreateMemoryDbContext();
            Guid         clientId1 = await db.AzureApps.AsQueryable().Select(app => app.Id).FirstAsync();

            await db.DisposeAsync();

            db = Utils.CreateMemoryDbContext();

            BindHandler bindHandler = new BindHandler(db, null);
            string      deleteUrl   = await bindHandler.DeleteAppAsync(clientId1.ToString());

            Assert.AreEqual(deleteUrl, string.Format(BindHandler.DeleteUrl, clientId1.ToString()));
            Assert.AreEqual(await db.AzureApps.AsQueryable().CountAsync(), 2);
            Assert.AreEqual(await db.AppAuths.AsQueryable().CountAsync(), 1);
        }
示例#13
0
        public async Task TestRegInvalidAppAsync()
        {
            string          testResultPath  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ApiResults", "InvalidApplicationResult.json");
            string          json            = File.ReadAllText(testResultPath);
            var             mocks           = Utils.CreateDefaultGraphApiMock(json);
            BotDbContext    db              = Utils.CreateMemoryDbContext();
            DefaultGraphApi defaultGraphApi = new DefaultGraphApi(db, mocks.Item1, mocks.Item2);

            BindHandler bindHandler = new BindHandler(db, defaultGraphApi);

            long   userId       = 123456;
            string userName     = "******";
            string email        = "*****@*****.**";
            Guid   clientId     = Guid.NewGuid();
            string clientSecret = "741852963";
            string appName      = "app1";

            await bindHandler.RegAppAsync(userId, userName, email, clientId.ToString(), clientSecret, appName);
        }
示例#14
0
        public async Task TestGetAuthUrlAsync()
        {
            Guid clientId = Guid.NewGuid();
            var  mocks    = Utils.CreateDefaultGraphApiMock(string.Empty);
            await Utils.SetOneValueDbContextAsync(clientId);

            BotDbContext    db = Utils.CreateMemoryDbContext();
            DefaultGraphApi defaultGraphApi = new DefaultGraphApi(db, mocks.Item1, mocks.Item2);
            Guid            authId          = (await db.AppAuths.AsQueryable().FirstAsync(item => item.AzureAppId == clientId)).Id;

            BindHandler bindHandler = new BindHandler(db, defaultGraphApi);

            (string, string)results = await bindHandler.GetAuthUrlAsync(clientId.ToString());

            string email   = "*****@*****.**";
            string message = $"https://login.microsoftonline.com/{DefaultGraphApi.GetTenant(email)}/oauth2/v2.0/authorize?client_id={clientId}&response_type=code&redirect_uri={HttpUtility.UrlEncode(BindHandler.AppUrl)}&response_mode=query&scope={HttpUtility.UrlEncode(DefaultGraphApi.Scope)}";

            Assert.AreEqual(message, results.Item2);

            results = await bindHandler.GetAuthUrlAsync(authId.ToString(), false);

            Assert.AreEqual(message, results.Item2);
        }
示例#15
0
        public void NetworkThread()
        {
            try
            {
                while (true)
                {
                    try
                    {
                        var client = new TcpClient();
                        client.Connect(ServerAddress, ServerPort);

                        using (var stream = client.GetStream())
                            using (var reader = new StreamReader(stream))
                                using (var writer = new StreamWriter(stream))
                                {
                                    Writer = writer;

                                    if (BindHandler != null)
                                    {
                                        var bindPacket = BindHandler.Invoke(this);
                                        SendPacket(bindPacket);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Skipped binding packet.");
                                    }

                                    PostBindHandler.Invoke(this);

                                    while (!reader.EndOfStream)
                                    {
                                        var packetName = reader.ReadLine();

                                        if (!KnownPackets.ContainsKey(packetName))
                                        {
                                            continue;
                                        }
                                        var packet    = KnownPackets[packetName];
                                        var arguments = new string[packet.PacketLength];
                                        for (var i = 0; i < arguments.Length; i++)
                                        {
                                            arguments[i] = reader.ReadLine();
                                        }
                                        packet.HandlePacket(arguments, this);
                                    }
                                    Console.WriteLine("Exited logic.");
                                }
                    }
                    catch (ThreadAbortException)
                    {
                        throw;
                    }
                    catch (Exception exception)
                    {
                        Console.WriteLine("Network exception information: {0}", exception);
                        ExceptionHandler.Invoke(exception);
                    }
                    Writer = null;
                    Thread.Sleep(2500);
                }
            }
            catch (ThreadAbortException) { }
        }
        public virtual Task <IProxyServerBindHandler> GetBindHandlerAsync(AddressFamily family)
        {
            IProxyServerBindHandler bindHandler = new BindHandler(family);

            return(Task.FromResult(bindHandler));
        }
示例#17
0
 public async Task TestUpdateAuthInvalidJsonAsync()
 {
     string      authResponse = @"{ ""Hi"": ""123"" }";
     BindHandler bindHandler  = new BindHandler(null, null);
     await bindHandler.UpdateAuthAsync(Guid.Empty.ToString(), authResponse);
 }
示例#18
0
 public async Task TestUpdateAuthErrorFormatAsync()
 {
     BindHandler bindHandler = new BindHandler(null, null);
     await bindHandler.UpdateAuthAsync(Guid.Empty.ToString(), string.Empty);
 }