コード例 #1
0
        public ActionResult GetViewToken(string email)
        {
            if (string.IsNullOrEmpty(email) || !email.MatchEmail())
            {
                return(ResultData(null, false, "请输入正确的邮箱!"));
            }

            if (RedisHelper.Exists("get:" + email))
            {
                RedisHelper.Expire("get:" + email, 120);
                return(ResultData(null, false, "发送频率限制,请在2分钟后重新尝试发送邮件!请检查你的邮件,若未收到,请检查你的邮箱地址或邮件垃圾箱!"));
            }

            if (!BroadcastService.Any(b => b.Email.Equals(email) && b.SubscribeType == SubscribeType.ArticleToken))
            {
                return(ResultData(null, false, "您目前没有权限访问这个链接,请联系站长开通访问权限!"));
            }

            var token = SnowFlake.GetInstance().GetUniqueShortId(6);

            RedisHelper.Set("token:" + email, token, 86400);
            BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Domain"] + "博客访问验证码", $"{CommonHelper.SystemSettings["Domain"]}本次验证码是:<span style='color:red'>{token}</span>,有效期为24h,请按时使用!", email));
            RedisHelper.Set("get:" + email, token, 120);
            return(ResultData(null));
        }
コード例 #2
0
        public List <BroadcastCustomModel> Notifications(int id, string apikey)
        {
            using (BroadcastService service = new BroadcastService())
            {
                List <BroadcastCustomModel> resp = new List <BroadcastCustomModel>();

                List <Broadcast> broadcasts = service.List(new PagingModel(), new CustomSearchModel());

                if (broadcasts.NullableAny())
                {
                    foreach (Broadcast b in broadcasts.OrderByDescending(o => o.CreatedOn))
                    {
                        if (b.Status == Status.Inactive.GetIntValue())
                        {
                            continue;
                        }

                        resp.Add(new BroadcastCustomModel()
                        {
                            Id        = b.Id,
                            Message   = b.Message,
                            CreatedOn = b.CreatedOn,
                            Status    = b.UserBroadcasts.Any(ub => ub.UserId == id) ? 1 : 0,
                        });
                    }
                }

                return(resp);
            }
        }
コード例 #3
0
        public async Task <ActionResult> Save(Broadcast model)
        {
            model.UpdateTime = DateTime.Now;
            var b = await BroadcastService.AddOrUpdateSavedAsync(c => c.Id, model) > 0;

            return(ResultData(model, b, b ? "更新订阅成功!" : "更新订阅失败!"));
        }
コード例 #4
0
    public void Initialize_WithNullAddress()
    {
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        Assert.Throws <ArgumentNullException>(() => broadcastService.Initialize(null));
    }
コード例 #5
0
    public void Initialize_WithReadyToUseIpAddress()
    {
        var calledCreateWithAddress        = false;
        var calledCreateWithAddressAndPort = false;

        _networkUtilityMock.Setup(utility =>
                                  utility.IsReadyToUse(_ipAddress))
        .Returns((IPAddress ipAddress) => Equals(ipAddress, _ipAddress));

        _broadcastFactoryMock.Setup(factory => factory.Create(It.IsAny <IPAddress>()))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddress = true);
        _broadcastFactoryMock.Setup(factory => factory.Create(It.IsAny <IPAddress>(), It.IsAny <int>()))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddressAndPort = true);

        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        var result = broadcastService.Initialize(_ipAddress);

        Assert.True(result);
        Assert.True(broadcastService.IsReady);
        Assert.True(calledCreateWithAddress ^ calledCreateWithAddressAndPort);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress), Times.AtMostOnce);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress, 0), Times.AtMostOnce);
    }
コード例 #6
0
        public ActionResult Pass(int id)
        {
            Post post = PostService.GetById(id);

            post.Status     = Status.Pended;
            post.ModifyDate = DateTime.Now;
            post.PostDate   = DateTime.Now;
            bool b = PostService.UpdateEntitySaved(post);

            if (!b)
            {
                return(ResultData(null, false, "审核失败!"));
            }
            if ("false" == CommonHelper.SystemSettings["DisabledEmailBroadcast"])
            {
                var    cast = BroadcastService.LoadEntities(c => c.Status == Status.Subscribed).ToList();
                string link = Request.Scheme + "://" + Request.Host + "/" + id;
                cast.ForEach(c =>
                {
                    var ts         = DateTime.Now.GetTotalMilliseconds();
                    string content = System.IO.File.ReadAllText(_hostingEnvironment.WebRootPath + "/template/broadcast.html").Replace("{{link}}", link + "?email=" + c.Email).Replace("{{time}}", post.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss")).Replace("{{title}}", post.Title).Replace("{{author}}", post.Author).Replace("{{content}}", post.Content.RemoveHtmlTag(150)).Replace("{{cancel}}", Url.Action("Subscribe", "Subscribe", new
                    {
                        c.Email,
                        act      = "cancel",
                        validate = c.ValidateCode,
                        timespan = ts,
                        hash     = (c.Email + "cancel" + c.ValidateCode + ts).AESEncrypt(AppConfig.BaiduAK)
                    }, Request.Scheme));
                    BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Title"] + "博客有新文章发布了", content, c.Email));
                });
            }

            return(ResultData(null, true, "审核通过!"));
        }
コード例 #7
0
    public async Task ReceiveAsync_ReceiveData()
    {
        var bytesToReceive = RandomizeByteSequence(1024);
        var receivedData   = new List <byte[]>();

        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        _broadcastImplMock.SetupSequence(broadcast => broadcast.ReceiveAsync(It.IsAny <CancellationToken>()))
        .ReturnsAsync(bytesToReceive).ReturnsAsync(() =>
        {
            Task.Delay(5000).Wait();
            return(Array.Empty <byte>());
        });
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.DataReceived += (_, args) => receivedData.Add(args.Data);
        broadcastService.Initialize(_ipAddress);
        var stopAfterDelay = Task.Run(() =>
        {
            Task.Delay(20).Wait();
            broadcastService.CancelReceive();
        });
        var receiving = broadcastService.StartReceiveAsync();

        await Task.WhenAll(stopAfterDelay, receiving);

        Assert.Single(receivedData);
        Assert.True(bytesToReceive.SequenceEqual(receivedData.First()));
    }
コード例 #8
0
        public ActionResult UpdateNotification(BroadcastViewModel model)
        {
            using (BroadcastService bservice = new BroadcastService())
                using (UserBroadcastService ubservice = new UserBroadcastService())
                {
                    Broadcast b = bservice.GetById(model.Id);

                    if (b == null)
                    {
                        Notify("Sorry, the requested resource could not be found. Please try again", NotificationType.Error);

                        return(PartialView("_AccessDenied"));
                    }

                    if (b.UserBroadcasts.Any(ub => ub.UserId == CurrentUser.Id))
                    {
                        int ubid = b.UserBroadcasts.FirstOrDefault(ub => ub.UserId == CurrentUser.Id).Id;

                        ubservice.Query($"DELETE FROM [dbo].[UserBroadcast] WHERE [Id]={ubid};");
                    }
                    else
                    {
                        ubservice.Create(new UserBroadcast()
                        {
                            BroadcastId = b.Id,
                            UserId      = CurrentUser.Id,
                        });
                    }

                    Notify("The selected Notification was successfully updated.", NotificationType.Success);

                    return(MyNotifications(new PagingModel(), new CustomSearchModel()));
                }
        }
コード例 #9
0
    public void Initialize_WithReadyToUseIpAddressTwice()
    {
        var calledCreateWithAddress        = false;
        var calledCreateWithAddressAndPort = false;

        _broadcastImplMock.Setup(broadcast => broadcast.LocalEndPoint).Returns(new IPEndPoint(_ipAddress, 0));
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        _broadcastFactoryMock.Setup(factory => factory.Create(_ipAddress))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddress = true);
        _broadcastFactoryMock.Setup(factory => factory.Create(_ipAddress, It.IsAny <int>()))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddressAndPort = true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        var firstInitResult  = broadcastService.Initialize(_ipAddress);
        var secondInitResult = broadcastService.Initialize(_ipAddress);

        Assert.True(firstInitResult);
        Assert.True(secondInitResult);
        Assert.True(broadcastService.IsReady);
        Assert.True(calledCreateWithAddress ^ calledCreateWithAddressAndPort);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress), Times.AtMostOnce);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress, 0), Times.AtMostOnce);
    }
コード例 #10
0
 public ScopedProcessingService(BroadcastService broadcastService, IOptionsMonitor <ServiceOptions> optionsAccessor, IHubContext <UpdateHub, IUpdate> updateHub, ILogger <ScopedProcessingService> logger)
 {
     _broadcastService = broadcastService;
     _options          = optionsAccessor.CurrentValue;
     _updateHub        = updateHub;
     _logger           = logger;
     _lastResult       = new List <Broadcast>();
 }
コード例 #11
0
    public void CancelReceive_ThrowOnDisposed()
    {
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Dispose();
        Assert.Throws <ObjectDisposedException>(() => broadcastService.CancelReceive());
    }
コード例 #12
0
    public void Initialize_AfterDispose()
    {
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Dispose();

        Assert.Throws <ObjectDisposedException>(() => broadcastService.Initialize(IPAddress.Any));
    }
コード例 #13
0
        public async Task GetRecipientsLogUnitTest_ShouldSucceed()
        {
            var client           = BuildSenderSubstitute_ReturnsSuccessStatus();
            var broadcastService = new BroadcastService(client);
            var logger           = Substitute.For <ILogger>();
            var task             = broadcastService.GetRecipientsAsync(logger, FirstListName);

            await TestInfoLogsWithThreeArgs <string, int, int>(task, 2, logger);
        }
コード例 #14
0
        public async Task DeleteDistributionListLogUnitTest_ShouldSucceed()
        {
            var client           = BuildSenderSubstitute_ReturnsSuccessStatus();
            var broadcastService = new BroadcastService(client);
            var logger           = Substitute.For <ILogger>();
            var task             = broadcastService.DeleteDistributionListAsync(FirstListName, CancellationToken.None, logger);

            await TestInfoLogsWithOneArg <string>(task, 2, logger);
        }
コード例 #15
0
        public async Task SendBroadcastLogUnitTest_ShouldSucceed()
        {
            var client           = BuildSenderSubstitute_ReturnsSuccessStatus();
            var broadcastService = new BroadcastService(client);
            var logger           = Substitute.For <ILogger>();
            var task             = broadcastService.SendMessageAsync(FirstListName, PlainText.Parse("UnitTests"), logger);

            await TestInfoLogsWithTwoArgs <string, Document>(task, 2, logger);
        }
コード例 #16
0
    public async Task SendAsync_ThrowOnUninitialized()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);
        var data = RandomizeByteSequence(1024);

        await Assert.ThrowsAsync <ServiceNotInitializedException>(() => broadcastService.SendAsync(data));
    }
コード例 #17
0
        public async Task DeleteRecipientLogUnitTest_ShouldSucceed()
        {
            var identity         = Identity.Parse(RecipientIdentity);
            var client           = BuildSenderSubstitute_ReturnsSuccessStatus();
            var broadcastService = new BroadcastService(client);
            var logger           = Substitute.For <ILogger>();
            var task             = broadcastService.DeleteRecipientAsync(FirstListName, identity, CancellationToken.None, logger);

            await TestInfoLogsWithTwoArgs <Identity, string>(task, 2, logger);
        }
コード例 #18
0
    public async Task ReceiveAsync_ThrowOnNotInitialized()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        await Assert.ThrowsAsync <ServiceNotInitializedException>(() => broadcastService.StartReceiveAsync());

        Assert.False(broadcastService.IsReceiving);
    }
コード例 #19
0
        internal ProjectItemServiceHandler()
            : base()
        {
            //TableName = "ProjectItem";
            //KeyName = "Key";
            Broadcaster = new BroadcastService();

            materials  = new ProjectItemMaterialServiceHandler();
            categories = new ProjectItemsCategoryServiceHandler();
        }
コード例 #20
0
        private void FormMain_Load(object sender, EventArgs e)
        {
            DoubleBuffered = true;
            _stateManager.Init();
            _tempFileManager.Init();
            _tcpIpFileManager.Init();

            _tcpIpTcpServer = TcpServer.GetInstance();
            _udpReceiver    = UdpReceiver.GetInstance();
            BroadcastService.GetInstance();
        }
コード例 #21
0
        public ActionResult Change(int id)
        {
            Broadcast cast   = BroadcastService.GetById(id);
            Status    status = cast.Status;

            cast.UpdateTime = DateTime.Now;
            cast.Status     = status == Status.Subscribed ? Status.Subscribing : Status.Subscribed;
            bool b = BroadcastService.SaveChanges() > 0;

            return(ResultData(null, b, status == Status.Subscribed ? "订阅成功" : "取消订阅成功!"));
        }
コード例 #22
0
        public BroadcastServiceTests()
        {
            _communityRepository     = new CommunityRepository();
            _communityRepositoryMock = new Mock <ICommunityRepository>();

            _communityRepositoryMock.Setup(m => m.GetBroadcastHtml(It.IsAny <int>()))
            .Returns((int appId) => { return(Task.FromResult(Resources.ResourceManager.GetString("BroadcastsHtml" + appId))); });

            _targetReal = new BroadcastService(_communityRepository);
            _target     = new BroadcastService(_communityRepositoryMock.Object);
        }
コード例 #23
0
        public ActionResult GetPageData(int page = 1, int size = 10, string search = "")
        {
            Expression <Func <Broadcast, bool> > where = b => true;
            if (!string.IsNullOrEmpty(search))
            {
                where = where.And(b => b.Email.Contains(search));
            }

            var list = BroadcastService.GetPagesNoTracking(page, size, @where, b => b.UpdateTime, false);

            return(Ok(list));
        }
コード例 #24
0
ファイル: FormMain.cs プロジェクト: twoentartian/TDPS2017
        private void FormMain_Load(object sender, EventArgs e)
        {
            DoubleBuffered = true;
            _stateManager.Init();
            _tempFileManager.Init();
            _tcpIpFileManager.Init();

            _tcpIpServer = Server.GetInstance();
            _tcpIpServer.StartListen();

            BroadcastService.GetInstance().StartBroadcast();
        }
コード例 #25
0
        public MainWindowViewModel(GitService gitService, BroadcastService broadcastService)
        {
            this.gitService       = gitService;
            this.broadcastService = broadcastService;

            this.Repos = new BindableCollection <RepoViewModel>();

            this.CurrentTab = "Browse";

            this.DisplayName = "ZeroGit";
            this.StatusText  = "Drop Project Folder Here to Share Repository";
        }
コード例 #26
0
        private void InitializeServiceHost()
        {
            BroadcastService serviceInstance = new BroadcastService();
            _serviceHost = new ServiceHost(serviceInstance);
            serviceInstance.ClientConnectionNotification += new EventHandler<ServiceNotificationEventArgs>(OnClientConnectionNotification);

            _serviceHost.Opening += OnServiceHostOpening;
            _serviceHost.Opened += OnServiceHostOpened;
            _serviceHost.Faulted += OnServiceHostFaulted;
            _serviceHost.Closing += OnServiceHostClosing;
            _serviceHost.Closed += OnServiceHostClosed;
        }
コード例 #27
0
        private async Task Send_Broadcast_UnitTest(string listName)
        {
            var sender = Substitute.For <ISender>();
            var calls  = 0;

            sender.When(x => x.SendMessageAsync(Arg.Any <Message>(), Arg.Any <CancellationToken>())).Do(x => calls++);
            var broadcastService = new BroadcastService(sender);

            await broadcastService.SendMessageAsync(listName, PlainText.Parse("UnitTests"), _logger);

            calls.ShouldBeGreaterThan(0);
        }
コード例 #28
0
    public void Initialize_WithNotReadyToUseIpAddress()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(It.IsAny <IPAddress>())).Returns(false);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        var result = broadcastService.Initialize(_ipAddress);

        Assert.False(result);
        Assert.False(broadcastService.IsReady);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress), Times.Never);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress, It.IsAny <int>()), Times.Never);
    }
コード例 #29
0
        public ActionResult GetPageData(int page = 1, int size = 10, string search = "")
        {
            Expression <Func <Broadcast, bool> > where = b => true;
            if (!string.IsNullOrEmpty(search))
            {
                where = where.And(b => b.Email.Contains(search));
            }

            var list      = BroadcastService.GetPagesFromCache(page, size, out var total, @where, b => b.UpdateTime, false).ToList();
            var pageCount = Math.Ceiling(total * 1.0 / size).ToInt32();

            return(Ok(new PageDataModel(list, pageCount, total)));
        }
コード例 #30
0
        public ActionResult Subscribe(string email)
        {
            if (bool.TryParse(CommonHelper.SystemSettings["DisabledEmailBroadcast"], out var disabled) && disabled)
            {
                return(ResultData(null, false, CommonHelper.SystemSettings["DisabledEmailBroadcastTip"]));
            }
            Broadcast entity = BroadcastService.GetFirstEntity(b => b.Email.Equals(email, StringComparison.InvariantCultureIgnoreCase));
            var       guid   = Guid.NewGuid();

            if (entity != null)
            {
                if (entity.Status == Status.Subscribed)
                {
                    return(ResultData(null, false, "您已经订阅过了,无需再重复订阅!"));
                }
                entity.ValidateCode = guid.ToString();
                entity.UpdateTime   = DateTime.Now;
                BroadcastService.UpdateEntity(entity);
            }
            else
            {
                BroadcastService.AddEntity(new Broadcast()
                {
                    Email        = email,
                    ValidateCode = guid.ToString(),
                    Status       = Status.Subscribing,
                    UpdateTime   = DateTime.Now
                });
            }
            try
            {
                var    ts   = DateTime.Now.GetTotalMilliseconds();
                string link = Url.Action("Subscribe", "Subscribe", new
                {
                    email,
                    act      = "verify",
                    validate = guid,
                    timespan = ts,
                    hash     = (email + "verify" + guid + ts).AESEncrypt(AppConfig.BaiduAK)
                }, "http");
                BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Title"] + "博客订阅:" + Request.Host, System.IO.File.ReadAllText(_hostingEnvironment.WebRootPath + "/template/subscribe.html").Replace("{{link}}", link), email));
                BroadcastService.SaveChanges();
                return(ResultData(null, message: "订阅成功,请打开您的邮箱确认操作后便可收到订阅更新!"));
            }
            catch (Exception e)
            {
                LogManager.Error(GetType(), e);
                return(ResultData(null, false, "订阅失败,这可能是服务器出现了一点问题,去留言板给站长反馈吧!"));
            }
        }
コード例 #31
0
    public async void CancelReceive()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(It.IsAny <IPAddress>())).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Initialize(_ipAddress);
        var receiveTask = broadcastService.StartReceiveAsync();

        broadcastService.CancelReceive();
        await receiveTask;

        Assert.False(broadcastService.IsReceiving);
    }
コード例 #32
0
        private StreamWriter writer; // nu objekt data og ikke lokale - så de kan bruges på tværs af metoder

        #endregion Fields

        #region Constructors

        public ClientHandler(Server server, Socket clientSocket, BroadcastService broadcastService)
        {
            this.server = server;
            this.clientSocket = clientSocket;
            this.broadcastService = broadcastService;
        }