예제 #1
0
        public void Start()
        {
            _connector.AddHost("tmq://localhost:48050");

            _connector.Connected       += Connected;
            _connector.MessageReceived += MessageReceived;
            _connector.Run();

            _timer = new Timer(async o =>
            {
                if (_connector.IsConnected)
                {
                    TmqClient client = _connector.GetClient();

                    TmqMessage message  = new TmqMessage(MessageType.Client, "producer-id");
                    message.ContentType = ModelTypes.ConsumerRequest;

                    ConsumerRequest request = new ConsumerRequest();
                    request.Guid            = Guid.NewGuid().ToString();

                    await message.SetJsonContent(request);
                    TmqMessage response     = await client.Request(message);
                    ProducerResponse rmodel = await response.GetJsonContent <ProducerResponse>();
                    Console.WriteLine($"> response received for: {rmodel.RequestGuid}");
                }
            }, null, 6000, 6000);
        }
예제 #2
0
        private IConsumerRequest CreateSignedOauthRequest(RestRequest request)
        {
            var oAuthContext         = MapRequestToOauthContext(request);
            var oAuthConsumerContext = new OAuthConsumerContext()
            {
                ConsumerKey                 = _credentials.ClientKey,
                ConsumerSecret              = _credentials.ClientSecret,
                SignatureMethod             = SignatureMethod.HmacSha1,
                UseHeaderForOAuthParameters = true
            };
            var accessToken = new AccessToken
            {
                ConsumerKey = _credentials.ClientKey,
                Token       = _credentials.TokenKey,
                TokenSecret = _credentials.TokenSecret
            };

            var consumerRequest = new ConsumerRequest(oAuthContext, oAuthConsumerContext, accessToken)
                                  .WithAcceptHeader(request.Accept)
                                  .WithRawContentType(request.ContentType);

            Dictionary <String, String> queryParams = request.QueryParameters ?? new Dictionary <String, String>();

            if (!request.IncludeHateoasLinks)
            {
                queryParams.Add("ShowLinks", "none");
            }

            consumerRequest = consumerRequest.WithQueryParameters(queryParams);

            return(consumerRequest.SignWithToken(accessToken));
        }
        /// <summary>
        /// Returns a URL appended by oEmbed parameters.
        /// </summary>
        /// <param name="serviceUri">The end point of the oEmbed service.</param>
        /// <param name="request">The oEmbed request.</param>
        /// <returns>The provider URL.</returns>
        protected static Uri GetProviderUriCore(string serviceUri, ConsumerRequest request)
        {
            var s = new StringBuilder(serviceUri);

            s.Append("?url=");
            s.Append(Uri.EscapeDataString(request.Url.ToString()));

            if (request.MaxWidth > 0)
            {
                s.Append("?max_width=");
                s.Append(request.MaxWidth.Value);
            }

            if (request.MaxHeight > 0)
            {
                s.Append("?max_height=");
                s.Append(request.MaxHeight.Value);
            }

            if (!string.IsNullOrEmpty(request.Format))
            {
                s.Append("?format=");
                s.Append(request.Format);
            }

            return(new Uri(s.ToString()));
        }
        // GET: ConsumerRequests/Create
        public IActionResult Create()
        {
            ConsumerRequest consumerRequest = new ConsumerRequest();

            //ViewData["ConsumerId"] = new SelectList(_context.Consumer, "ConsumerId", "ConsumerId");
            return(View(consumerRequest));
        }
예제 #5
0
        public void GetBytesValidStructure()
        {
            string          topicName = "topic";
            ConsumerRequest request   = new ConsumerRequest(topicName, 1, 10L, 100);

            // REQUEST TYPE ID + TOPIC LENGTH + TOPIC + PARTITION + OFFSET + MAX SIZE
            int requestSize = 2 + 2 + topicName.Length + 4 + 8 + 4;

            byte[] bytes = request.GetBytes();
            Assert.IsNotNull(bytes);

            // add 4 bytes for the length of the message at the beginning
            Assert.AreEqual(requestSize + 4, bytes.Length);

            // first 4 bytes = the message length
            Assert.AreEqual(25, BitConverter.ToInt32(BitWorks.ReverseBytes(bytes.Take(4).ToArray <byte>()), 0));

            // next 2 bytes = the request type
            Assert.AreEqual((short)RequestType.Fetch, BitConverter.ToInt16(BitWorks.ReverseBytes(bytes.Skip(4).Take(2).ToArray <byte>()), 0));

            // next 2 bytes = the topic length
            Assert.AreEqual((short)topicName.Length, BitConverter.ToInt16(BitWorks.ReverseBytes(bytes.Skip(6).Take(2).ToArray <byte>()), 0));

            // next few bytes = the topic
            Assert.AreEqual(topicName, Encoding.ASCII.GetString(bytes.Skip(8).Take(topicName.Length).ToArray <byte>()));

            // next 4 bytes = the partition
            Assert.AreEqual(1, BitConverter.ToInt32(BitWorks.ReverseBytes(bytes.Skip(8 + topicName.Length).Take(4).ToArray <byte>()), 0));

            // next 8 bytes = the offset
            Assert.AreEqual(10, BitConverter.ToInt32(BitWorks.ReverseBytes(bytes.Skip(12 + topicName.Length).Take(8).ToArray <byte>()), 0));

            // last 4 bytes = the max size
            Assert.AreEqual(100, BitConverter.ToInt32(BitWorks.ReverseBytes(bytes.Skip(20 + +topicName.Length).Take(4).ToArray <byte>()), 0));
        }
예제 #6
0
        async Task <ConsumerResponse> HandleConsumerRequest(
            SubscriptionId subscriptionId,
            AsyncProducerConsumerQueue <StreamEvent> queue,
            ConsumerRequest request,
            CancellationToken cancellationToken)
        {
            try
            {
                var eventHorizonEvent = request.Event;
                await queue.EnqueueAsync(
                    new StreamEvent(
                        eventHorizonEvent.Event.ToCommittedEvent(),
                        eventHorizonEvent.StreamSequenceNumber,
                        StreamId.EventLog,
                        Guid.Empty,
                        false),
                    cancellationToken).ConfigureAwait(false);

                return(new ConsumerResponse());
            }
            catch (Exception ex)
            {
                _logger.Warning(ex, "An error occurred while handling event horizon event coming from subscription {Subscription}", subscriptionId);
                return(new ConsumerResponse
                {
                    Failure = new Failure(FailureId.Other, $"An error occurred while handling event horizon event coming from subscription {subscriptionId}. {ex.Message}")
                });
            }
        }
예제 #7
0
        /// <summary>
        /// Reads the cached <see cref="Metadata" /> for the URL of <paramref name="request"/>.
        /// </summary>
        /// <param name="service">The <see cref="MetadataService" /> reading cache.</param>
        /// <param name="request">The consumer request.</param>
        /// <returns>The task object representing the asynchronous operation.
        /// The <see cref="Task{TResult}.Result"/> property on the task object returns a cached <see cref="Metadata"/>.</returns>
        public async Task <Metadata> ReadAsync(MetadataService service, ConsumerRequest request)
        {
            var u = request.Url.ToString();
            var d = await _Cache.GetAsync(u).ConfigureAwait(false);

            if (d == null)
            {
                return(null);
            }

            try
            {
                using (var ms = new MemoryStream(d))
                {
                    var r = (Metadata)XamlServices.Load(ms);
                    r.OnDeserialized(service);
                    return(r);
                }
            }
            catch
            {
                try
                {
                    var t = _Cache.RemoveAsync(u);
                    t.GetHashCode();
                }
                catch { }

                return(null);
            }
        }
        public override void Read(ConsumerRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("Please specify a valid request");
            }

            if (String.IsNullOrWhiteSpace(request.QueueName))
            {
                throw new ArgumentNullException("Please specify a valid queue name");
            }

            Request = request;

            // Subscribe to the 'Received' event which will allow us to add each message to the collection as they come in
            MessageConsumer.Received += (sender, args) =>
            {
                messageQueue.Add(args);
                Console.WriteLine($"Added To Collection: {Encoding.UTF8.GetString(args.Body)}");
            };

            // Subscribe to the 'ConsumerCancelled' event which wil allow us to handle any cancellations
            MessageConsumer.ConsumerCancelled += ConsumerCancelledEventHandler;

            //Console.WriteLine($"{ServiceQuality.PrefetchSize} - {ServiceQuality.PrefetchCount} - {ServiceQuality.Global}");
            // Quality of service
            //we require one message at a time and we don’t want to process any additional messages until the actual one has been processed
            Channel.BasicQos(ServiceQuality.PrefetchSize, ServiceQuality.PrefetchCount, ServiceQuality.Global);

            // Consume messages from RabbitMQ server
            ConsumerTag    = (ConsumerTag == null) ? Channel.BasicConsume(QueueName, NoAck, MessageConsumer) : Channel.BasicConsume(QueueName, NoAck, ConsumerTag, MessageConsumer);
            LatestDelivery = null;
        }
예제 #9
0
        private ConsumerRequest GetConsumerRequest(Application consumerApp, Application providerApp, DataSchema schema)
        {
            var approvedRequest = _consumerRequests.Where(i => i.ProviderID == providerApp.ID).FirstOrDefault(i => i.DataSchemaID == schema.ID && i.ConsumerID == consumerApp.ID & i.Status == (int)RequestStatus.Approved);

            if (approvedRequest != null)
            {
                return(approvedRequest);
            }
            var consumerRequest = _consumerRequests.Where(i => i.ProviderID == providerApp.ID).FirstOrDefault(i => i.ConsumerID == consumerApp.ID && i.DataSchemaID == schema.ID && i.Status == (int)RequestStatus.NotProcessed);

            // Create consumer request if not exists
            if (consumerRequest == null)
            {
                consumerRequest = new ConsumerRequest
                {
                    ProviderID   = providerApp.ID,
                    ConsumerID   = consumerApp.ID,
                    Status       = (int)RequestStatus.NotProcessed,
                    DataSchemaID = schema.ID,
                    CreatedAt    = GetDate
                };

                // Save request
                _consumerRequests.Add(consumerRequest);

                var urlToConsumerRequests = $"{_host}/ConsumerRequests/Index?applicationId={providerApp.ID}";
                _notificationService.LegalOfficer.NewConsumerRequestInBackground(providerApp.ID, urlToConsumerRequests);
            }
            return(consumerRequest);
        }
예제 #10
0
        public void get_request_description_copies_headers_from_context_to_description()
        {
            context.Headers["a-key"] = "a-value";
            var request = new ConsumerRequest(context, consumerContext, accessToken);
            RequestDescription description = request.GetRequestDescription();

            Assert.Equal("a-value", description.Headers["a-key"]);
        }
예제 #11
0
        /// <summary>
        /// Determines whether this provider can handle the specified request.
        /// </summary>
        /// <param name="request">The consumer request to handle.</param>
        /// <returns>
        /// <c>true</c> if this provider can handle <paramref name="request" />; otherwise <c>false</c>.
        /// </returns>
        public bool CanHandle(ConsumerRequest request)
        {
            var u = request.Url;

            return(u.IsDefaultPort &&
                   u.Scheme == "https" &&
                   Hosts.Contains(u.Host) &&
                   _PathPattern.IsMatch(u.AbsolutePath));
        }
예제 #12
0
파일: Program.cs 프로젝트: tadoli/apis
        private static void Main()
        {
            string requestUrl       = "https://apis.daum.net/oauth/requestToken";
            string userAuthorizeUrl = "https://apis.daum.net/oauth/authorize";
            string accessUrl        = "https://apis.daum.net/oauth/accessToken";
            string callBackUrl      = "oob";

            var consumerContext = new OAuthConsumerContext
            {
                //TODO:Daum OAuth소개 페이지(https://apis.daum.net/oauth/consumer/list)에서 등록된 Consumer 정보 입력
                ConsumerKey     = "{발급 받은 Key를 입력하세요.}",
                ConsumerSecret  = "{발급 받은 Secret를 입력하세요.}",
                SignatureMethod = SignatureMethod.HmacSha1,
            };

            //OAuth 준비
            var session = new OAuthSession(consumerContext, requestUrl, userAuthorizeUrl, accessUrl);

            session.WithQueryParameters(new Dictionary <string, string>()
            {
                { "oauth_callback", callBackUrl }
            });

            // 1. request token 받기
            DevDefined.OAuth.Framework.IToken requestToken = session.GetRequestToken();

            // 인증주소 받기
            string authorizationLink = session.GetUserAuthorizationUrlForToken(requestToken, callBackUrl);

            // 2. 사용자 인증 하기
            System.Console.WriteLine("웹브라우저를 실행하여 다음 URL을 접속하세요.");
            System.Console.WriteLine(authorizationLink);
            System.Console.Write("\n\n웹브라우저에서 인증 후 반환 된 값을 입력하세요:");
            string inputVerifier = System.Console.ReadLine();

            // 얻어진 Verifier값을 포함시키기
            session.WithQueryParameters(new Dictionary <string, string>()
            {
                { "oauth_verifier", inputVerifier }
            });

            // 3. 인증 후 얻은 Verifier값을 이용하여 엑세스 토큰 얻기
            DevDefined.OAuth.Framework.IToken accessToken = session.ExchangeRequestTokenForAccessToken(requestToken);

            // '요즘 가입여부 확인하기' API를 통해 인증 확인하기
            System.Console.WriteLine("OAuth를 통한 인증으로 '요즘 글쓰기'를 테스트합니다.");
            ConsumerRequest cr = session.Request().Post().ForUrl("https://apis.daum.net/yozm/v1_0/message/add.xml");

            cr = cr.WithFormParameters(new Dictionary <string, string>()
            {
                { "message", System.Web.HttpUtility.UrlEncode("%$가나다^$%^%$^RTY<><><><><") }
            });
            string responseText = cr.ToString();

            System.Console.WriteLine(responseText);
            System.Console.ReadLine();
        }
예제 #13
0
 public void Send_Consume_Request_With_Single_Thread_Diff_Consumer_Same_Topic()
 {
     for (int i = 0; i < guids.Length; i++)
     {
         var consumer = CreateConsumer(guids[i]);
         consumer.ConnectToServer();
         ConsumerRequest consumeRequest = new ConsumerRequest(topic, null, consumer.ClientId, ConsumerRequestType.consume);
         var             response       = consumer.SendRequest(consumeRequest);
     }
 }
예제 #14
0
        public void it_can_parse_unset_IfModifiedSince_date()
        {
            ConsumerRequest     consumerRequest = new ConsumerRequest(null, null, null, null);
            NameValueCollection headers         = new NameValueCollection();
            OAuthContext        oauthContext    = new OAuthContext {
                Headers = headers
            };

            Assert.AreEqual(null, consumerRequest.ParseIfModifiedSince(oauthContext));
        }
예제 #15
0
 public Metadata GetMetadata(ConsumerRequest request)
 {
     if (!CanHandle(request))
     {
         return(null);
     }
     return(new TwitterMetadata()
     {
         Url = request.Url.ToString()
     });
 }
 public ActionResult Edit(int id, [Bind("ConsumerRequestId,DateTime,Request,ConsumerId")] ConsumerRequest consumerRequest)
 {
     try
     {
         return(RedirectToAction(nameof(Index)));
     }
     catch
     {
         return(View());
     }
 }
        public ActionResult Create(ConsumerRequest consumerRequest)
        {
            var userId      = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var currentUser = _context.Consumer.Where(a => a.IdentityUserId == userId).SingleOrDefault();

            consumerRequest.DateTime   = DateTime.UtcNow;
            consumerRequest.ConsumerId = currentUser.ConsumerId;
            _context.ConsumerRequest.Add(consumerRequest);
            _context.SaveChanges();
            return(RedirectToAction("Index", "Consumers"));
        }
예제 #18
0
 /// <summary>
 /// Returns a <see cref="Metadata" /> that represents the specified URL.
 /// </summary>
 /// <param name="request">The consumer request to handle.</param>
 /// <returns>
 /// The <see cref="Metadata" /> if this provider can handle <paramref name="request" />;
 /// otherwise <c>null</c>.
 /// </returns>
 public Metadata GetMetadata(ConsumerRequest request)
 {
     if (!CanHandle(request))
     {
         return(null);
     }
     return(new UnknownMetadata()
     {
         Url = request.Url,
     });
 }
예제 #19
0
        public void Send_Consume_Callback_With_Single_Thread_Same_Consumer()
        {
            var consumer = CreateConsumer(Guid.NewGuid());

            consumer.ConnectToServer();
            ConsumerRequest  callBackRequest = new ConsumerRequest(topic, null, consumer.ClientId, ConsumerRequestType.callback);
            ConsumerResponse response        = consumer.SendRequest(callBackRequest);

            Assert.AreEqual(response.Topic, "topic1");
            Assert.AreEqual(response.ClientCurrentStatus, ClientStatus.wait);
        }
예제 #20
0
        /// <summary>
        /// Returns a <see cref="Metadata"/> that represents the specified URL.
        /// </summary>
        /// <param name="request">The consumer request to handle.</param>
        /// <returns>The <see cref="AnitvMetadata"/> if this provider can handle <paramref name="request"/>; otherwise <c>null</c>.</returns>
        public Metadata GetMetadata(ConsumerRequest request)
        {
            var m = _UriPattern.Match(request.Url.ToString());

            if (m.Success)
            {
                return(new AnitvMetadata()
                {
                    Url = request.Url
                });
            }
            return(null);
        }
예제 #21
0
        /// <summary>
        /// Returns a <see cref="Metadata" /> that represents the specified URL.
        /// </summary>
        /// <param name="request">The consumer request to handle.</param>
        /// <returns>
        /// The <see cref="NicovideoMetadata" /> if this provider can handle <paramref name="request"
        /// />; otherwise <c>null</c>.
        /// </returns>
        public Metadata GetMetadata(ConsumerRequest request)
        {
            var m = regex.Match(request.Url.ToString());

            if (m.Success)
            {
                return(new NicovideoMetadata()
                {
                    VideoId = long.Parse(m.Groups[1].Value)
                });
            }
            return(null);
        }
예제 #22
0
        /// <summary>
        /// Returns a <see cref="Metadata" /> that represents the specified URL.
        /// </summary>
        /// <param name="request">The consumer request to handle.</param>
        /// <returns>
        /// The <see cref="OEmbedProxyMetadata" /> if this provider can handle <paramref
        /// name="request" />; otherwise <c>null</c>.
        /// </returns>
        public Metadata GetMetadata(ConsumerRequest request)
        {
            var m = _UriPattern.Match(request.Url.ToString());

            if (m.Success)
            {
                var url = "https://d.pr/i/" + m.Groups["hash"].Value;
                return(new DroplrMetadata()
                {
                    Url = url.ToUri(),
                });
            }
            return(null);
        }
예제 #23
0
        public void Send_Consume_Request_With_Single_Thread_Same_Consumer_Same_Topic()
        {
            var consumer = CreateConsumer(Guid.NewGuid());

            consumer.ConnectToServer();
            byte[]          body           = System.Text.Encoding.UTF8.GetBytes("Hello World");
            ConsumerRequest consumeRequest = new ConsumerRequest(topic, body, consumer.ClientId, ConsumerRequestType.consume);
            var             response       = consumer.SendRequest(consumeRequest);
            string          helloWorld     = Encoding.UTF8.GetString(response.Body);

            Assert.AreEqual(response.Topic, "topic1");
            Assert.AreEqual(helloWorld, "Hello World");
            Assert.AreEqual(response.CanConsume, false);
        }
예제 #24
0
        /// <summary>
        /// Returns a <see cref="Metadata" /> that represents the specified URL.
        /// </summary>
        /// <param name="request">The consumer request to handle.</param>
        /// <returns>
        /// The <see cref="Metadata" /> if this provider can handle <paramref name="request" />;
        /// otherwise <c>null</c>.
        /// </returns>
        public Metadata GetMetadata(ConsumerRequest request)
        {
            if (!CanHandle(request))
            {
                return(null);
            }

            var m = CreateMetadata();

            m.Url       = request.Url.ToString();
            m.OEmbedUrl = GetProviderUriFor(request).ToString();

            return(m);
        }
예제 #25
0
        /// <summary>
        /// Returns a <see cref="Metadata" /> that represents the specified URL.
        /// </summary>
        /// <param name="request">The consumer request to handle.</param>
        /// <returns>
        /// The <see cref="Metadata" /> if this provider can handle <paramref name="request" />;
        /// otherwise <c>null</c>.
        /// </returns>
        public Metadata GetMetadata(ConsumerRequest request)
        {
            var m = regex.Match(request.Url.ToString());

            if (!m.Success)
            {
                return(null);
            }
            return(new AmazonMetadata()
            {
                Provider = this,
                Destination = m.Groups["dest"].Value,
                Asin = m.Groups["asin"].Value
            });
        }
예제 #26
0
        /// <summary>
        /// Returns a <see cref="Metadata" /> that represents the specified URL.
        /// </summary>
        /// <param name="request">The consumer request to handle.</param>
        /// <returns>
        /// The <see cref="PixivMetadata" /> if this provider can handle <paramref name="request" />;
        /// otherwise <c>null</c>.
        /// </returns>
        public Metadata GetMetadata(ConsumerRequest request)
        {
            var m = _UriPattern.Match(request.Url.ToString());

            if (m.Success)
            {
                var illustId = int.Parse(m.Groups["illust_id"].Value);
                return(new PixivMetadata()
                {
                    Url = $"https://www.pixiv.net/member_illust.php?mode=medium&illust_id={ illustId }".ToUri(),
                    IllustId = illustId
                });
            }
            return(null);
        }
예제 #27
0
        public void Send_Consume_Callback_with_Single_Thread_Diff_Consumers()
        {
            List <ConsumerResponse> responses = new List <ConsumerResponse>();

            for (int i = 0; i < guids.Length; i++)
            {
                var consumer = CreateConsumer(guids[i]);
                consumer.ConnectToServer();
                var callBackRequest = new ConsumerRequest(topic, null, consumer.ClientId, ConsumerRequestType.callback);
                var response        = consumer.SendRequest(callBackRequest);
                responses.Add(response);
            }

            Assert.AreEqual(responses.Count, guids.Length);
            Assert.IsTrue(responses.Any(x => x.ClientCurrentStatus == ClientStatus.wait));
        }
예제 #28
0
        /// <summary>
        /// Write a cache data to the cache store.
        /// </summary>
        public async Task WriteAsync(MetadataService service, ConsumerRequest request, Metadata metadata)
        {
            var u = request.Url.ToString();

            if (metadata == null)
            {
                await _Cache.RemoveAsync(u).ConfigureAwait(false);
            }
            else
            {
                using (var ms = new MemoryStream())
                {
                    XamlServices.Save(ms, metadata);

                    await _Cache.SetAsync(u, ms.ToArray()).ConfigureAwait(false);
                }
            }
        }
예제 #29
0
        public ConsumerRequest Build()
        {
            var req = new ConsumerRequest(this.language)
            {
                Operation          = operation,
                NationalIdentifier = nationalIdentifier
            };

            if (shippingAddressRestrictedToCountryCodes != null)
            {
                foreach (var countryCode in shippingAddressRestrictedToCountryCodes)
                {
                    req.ShippingAddressRestrictedToCountryCodes.Add(countryCode);
                }
            }

            return(req);
        }
예제 #30
0
        private void MessageReceived(ClientSocketBase <TmqMessage> client, TmqMessage message)
        {
            if (message.Type == MessageType.Client && message.ContentType == ModelTypes.ConsumerRequest)
            {
                ConsumerRequest request = message.GetJsonContent <ConsumerRequest>().Result;
                Console.WriteLine($"Consumer request received: {request.Guid}");

                ProducerResponse model = new ProducerResponse();
                model.RequestGuid  = request.Guid;
                model.ResponseGuid = Guid.NewGuid().ToString();

                TmqMessage response = message.CreateResponse();
                response.ContentType = ModelTypes.ProducerResponse;
                response.SetJsonContent(model);
                TmqClient tmq = (TmqClient)client;
                tmq.Send(response);
            }
        }