Пример #1
0
        /// <summary>
        /// Website example.
        /// </summary>
        public static void Example6()
        {
            using (var client = _factory.CreateChannel())
            {
                var contactResult = client.ContactGet(ApiKey, SiteKey,
                                                      new ContactRequest {
                    ExternalIdentifier = ExternalId
                });

                var website = new WebsiteRequest
                {
                    ContactId   = contactResult.Id,
                    Url         = "http://blog.johanv.org",
                    WebsiteType = WebsiteType.Main
                };

                var result = client.WebsiteSave(ApiKey, SiteKey, website);
                website.Id = result.Values.First().Id;

                Console.WriteLine("Website added for contact with ContactID {0}  (external ID {1})", contactResult.Id, ExternalId);
                Console.WriteLine("You might want to check that. Then press enter.");
                Console.ReadLine();

                Debug.Assert(website.Id != null);
                client.WebsiteDelete(ApiKey, SiteKey, new DeleteRequest(website.Id.Value));

                Console.WriteLine("Website was deleted again.");
            }
        }
Пример #2
0
        public IActionResult DenyWebsiteRequest(DenyWebsiteRequest inputModel)
        {
            EditWebsiteRequestModel outputModel = new EditWebsiteRequestModel();
            ObjectResult            output      = StatusCode(500, error.DenyWebsiteRequest);

            if (authProvider.IsAdmin())
            {
                WebsiteRequest wr = websiteRequestDAL.Get(inputModel.WebsiteRequest.Id);

                if (wr == null)
                {
                    output = StatusCode(404, error.NotFound);
                }
                else
                {
                    outputModel.SuccessfullyDeleted = websiteRequestDAL.Delete(wr.Id);

                    if (outputModel.SuccessfullyDeleted)
                    {
                        outputModel.EmailSent = emailProvider.WebsiteRequestDenied(inputModel);
                        output = StatusCode(200, outputModel);
                    }
                    else
                    {
                        output = StatusCode(500, outputModel);
                    }
                }
            }
            else
            {
                output = StatusCode(401, error.NotAdmin);
            }

            return(output);
        }
        public void ChainedPhoneAnd2WebsitesCreate()
        {
            using (var client = TestHelper.ClientGet())
            {
                // Create a contact, chain phone and website.
                var myPhone1 = new PhoneRequest {
                    PhoneNumber = "03-100 20 00"
                };
                var myPhone2 = new PhoneRequest {
                    PhoneNumber = "03-100 20 01"
                };
                var myWebsite1 = new WebsiteRequest {
                    Url = "http://smurf.com"
                };
                var myWebsite2 = new WebsiteRequest {
                    Url = "http://smurf.org"
                };

                var result = client.ContactSave(TestHelper.ApiKey, TestHelper.SiteKey,
                                                new ContactRequest
                {
                    ContactType        = ContactType.Individual,
                    LastName           = "Smurf",
                    FirstName          = "Smul",
                    ExternalIdentifier = "Test_External_Smurf",
                    ApiOptions         = new ApiOptions {
                        Match = "external_identifier"
                    },
                    WebsiteSaveRequest = new List <WebsiteRequest> {
                        myWebsite1, myWebsite2
                    },
                    PhoneSaveRequest = new List <PhoneRequest> {
                        myPhone1, myPhone2
                    },
                });

                // This crashes because of upstream issue CRM-15815:
                Assert.IsNotNull(result.Id);

                // Get contact with websites
                var contact = client.ContactGetSingle(TestHelper.ApiKey, TestHelper.SiteKey,
                                                      new ContactRequest
                {
                    Id = result.Id.Value,
                    PhoneGetRequest   = new PhoneRequest(),
                    WebsiteGetRequest = new WebsiteRequest(),
                });

                // Delete contact before doing assertions.
                client.ContactDelete(TestHelper.ApiKey, TestHelper.SiteKey, new DeleteRequest(result.Id.Value), 1);

                Assert.AreEqual(result.Id, contact.Id);
                Assert.AreEqual(2, contact.PhoneResult.Count);
                Assert.AreEqual(myPhone1.PhoneNumber, contact.PhoneResult.Values.First().PhoneNumber);
                Assert.AreEqual(myPhone2.PhoneNumber, contact.PhoneResult.Values.Last().PhoneNumber);
                Assert.AreEqual(2, contact.WebsiteResult.Count);
                Assert.AreEqual(myWebsite1.Url, contact.WebsiteResult.Values.First().Url);
                Assert.AreEqual(myWebsite2.Url, contact.WebsiteResult.Values.Last().Url);
            }
        }
Пример #4
0
        private async Task <Website> GetEntity(WebsiteRequest request, string path = null)
        {
            var filePath = await _fileService.UploadImage(request.HomepageSnapshot, path);

            var password = _passwordHashService.HashWithSaltPassword(request.Login.Password);

            var entity = _mapper.RequestToEntity(request, filePath, password);

            return(entity);
        }
Пример #5
0
        public IActionResult CompleteWebsiteRequest(int wrid)
        {
            WebsiteRequest wr = websiteRequestDAL.Get(wrid);

            websiteRequestDAL.Delete(wr.Id);

            emailProvider.WebsiteRequestComplete(wr);

            return(View(wr));
        }
Пример #6
0
        public async Task <IActionResult> UpdateWebsite([FromQuery] int id, [FromBody] WebsiteRequest command)
        {
            var result = await _websiteHandler.HandleUpdateRequest(id, command);

            if (!result.IsSuccess)
            {
                return(NotFound(result.Fail));
            }

            return(Ok());
        }
        public void WorkaroundCrm15815()
        {
            using (var client = TestHelper.ClientGet())
            {
                // Create a contact, chain phone and website.
                var myPhone = new PhoneRequest {
                    PhoneNumber = "03-100 20 00"
                };
                var myWebsite1 = new WebsiteRequest {
                    Url = "http://smurf.com"
                };
                var myWebsite2 = new WebsiteRequest {
                    Url = "http://smurf.org"
                };
                const string myExternalId = "Test_External_Smurf";

                client.ContactSaveWorkaroundCrm15815(TestHelper.ApiKey, TestHelper.SiteKey,
                                                     new ContactRequest
                {
                    ContactType        = ContactType.Individual,
                    LastName           = "Smurf",
                    FirstName          = "Smul",
                    ExternalIdentifier = myExternalId,
                    ApiOptions         = new ApiOptions {
                        Match = "external_identifier"
                    },
                    WebsiteSaveRequest = new List <WebsiteRequest> {
                        myWebsite1, myWebsite2
                    },
                    PhoneSaveRequest = new List <PhoneRequest> {
                        myPhone
                    },
                });

                // Get contact with websites
                var contact = client.ContactGetSingle(TestHelper.ApiKey, TestHelper.SiteKey,
                                                      new ContactRequest
                {
                    ExternalIdentifier = myExternalId,
                    PhoneGetRequest    = new PhoneRequest(),
                    WebsiteGetRequest  = new WebsiteRequest(),
                });

                // Delete contact before doing assertions.
                client.ContactDelete(TestHelper.ApiKey, TestHelper.SiteKey, new DeleteRequest(contact.Id), 1);

                Assert.AreEqual(1, contact.PhoneResult.Count);
                Assert.AreEqual(myPhone.PhoneNumber, contact.PhoneResult.Values.First().PhoneNumber);
                Assert.AreEqual(2, contact.WebsiteResult.Count);
                Assert.AreEqual(myWebsite1.Url, contact.WebsiteResult.Values.First().Url);
                Assert.AreEqual(myWebsite2.Url, contact.WebsiteResult.Values.Last().Url);
            }
        }
Пример #8
0
        public WebsiteRequest GenerateWebsiteRequest()
        {
            Regex regex = new Regex(@"(http(s)?:\/\/)|(\/.*){1}", RegexOptions.IgnoreCase | RegexOptions.ECMAScript);

            WebsiteRequest wr = new WebsiteRequest()
            {
                BaseURL = regex.Replace(URL, "").ToString(),
                FullURL = URL
            };

            return(wr);
        }
        public void ChainedWebsiteCreateTwo()
        {
            using (var client = TestHelper.ClientGet())
            {
                // Create a contact, chain website.
                var my1StWebsite = new WebsiteRequest {
                    Url = "http://smurf.com"
                };
                var my2NdWebsite = new WebsiteRequest {
                    Url = "http://salsaparilla.org"
                };

                var newContact = new ContactRequest
                {
                    ContactType        = ContactType.Individual,
                    LastName           = "Smurf",
                    FirstName          = "Smul",
                    ExternalIdentifier = "Test_External_Smurf",
                    ApiOptions         = new ApiOptions {
                        Match = "external_identifier"
                    },
                    WebsiteSaveRequest = new List <WebsiteRequest> {
                        my1StWebsite, my2NdWebsite
                    },
                };

                var result = client.ContactSave(TestHelper.ApiKey, TestHelper.SiteKey, newContact);
                Debug.Assert(result.Id.HasValue);

                // Get contact with websites
                var contact = client.ContactGetSingle(TestHelper.ApiKey, TestHelper.SiteKey,
                                                      new ContactRequest
                {
                    Id = result.Id.Value,
                    WebsiteGetRequest = new WebsiteRequest()
                });
                Assert.IsNotNull(contact.Id);

                // Clean up first (delete contact), then do other assertions.
                // (So the contact gets deleted even if the assertions fail.)
                client.ContactDelete(TestHelper.ApiKey, TestHelper.SiteKey, new DeleteRequest(contact.Id), 1);

                Assert.IsNotNull(contact.Id);
                Assert.AreEqual(newContact.ExternalIdentifier, contact.ExternalIdentifier);
                Assert.AreEqual(2, contact.WebsiteResult.Count);
                Assert.IsTrue(contact.WebsiteResult.Values.Any(ws => ws.Url == my1StWebsite.Url));
                Assert.IsTrue(contact.WebsiteResult.Values.Any(ws => ws.Url == my2NdWebsite.Url));
            }
        }
        public void ChainedOptionsWebsite()
        {
            using (var client = TestHelper.ClientGet())
            {
                // Create a contact with two websites.
                var myWebsite1 = new WebsiteRequest {
                    Url = "http://smurf1.com"
                };
                var myWebsite2 = new WebsiteRequest {
                    Url = "http://smurf2.com"
                };

                var saveResult = client.ContactSave(TestHelper.ApiKey, TestHelper.SiteKey,
                                                    new ContactRequest
                {
                    ContactType        = ContactType.Individual,
                    LastName           = "Smurf",
                    FirstName          = "Smul",
                    ExternalIdentifier = "Test_External_Smurf",
                    ApiOptions         = new ApiOptions {
                        Match = "external_identifier"
                    },
                    WebsiteSaveRequest = new List <WebsiteRequest> {
                        myWebsite1, myWebsite2
                    },
                });
                Assert.IsNotNull(saveResult.Id);

                // Get contact with websites, order them backwards, and retrieve only one.
                var contact = client.ContactGetSingle(TestHelper.ApiKey, TestHelper.SiteKey,
                                                      new ContactRequest
                {
                    Id = saveResult.Id.Value,
                    WebsiteGetRequest = new WebsiteRequest
                    {
                        ApiOptions = new ApiOptions {
                            Sort = "url DESC", Limit = 1
                        }
                    }
                });

                // Delete contact before doing assertions.
                client.ContactDelete(TestHelper.ApiKey, TestHelper.SiteKey, new DeleteRequest(saveResult.Id.Value), 1);

                Assert.AreEqual(1, contact.WebsiteResult.Count);
                Assert.AreEqual(myWebsite2.Url, contact.WebsiteResult.Values.First().Url);
            }
        }
Пример #11
0
        public void CreateWebsite()
        {
            using (var client = TestHelper.ClientGet())
            {
                var website = new WebsiteRequest
                {
                    ContactId   = _myContactId,
                    Url         = "http://blog.johanv.org",
                    WebsiteType = WebsiteType.Main
                };

                var result = client.WebsiteSave(TestHelper.ApiKey, TestHelper.SiteKey, website);

                Assert.AreEqual(0, result.IsError);
                Assert.AreEqual(website.ContactId, result.Values.First().ContactId);
                Assert.AreEqual(website.Url, result.Values.First().Url);
                Assert.AreEqual(website.WebsiteType, result.Values.First().WebsiteType);
            }
        }
Пример #12
0
        public bool NewWebsiteRequest(WebsiteRequest wr)
        {
            bool output = false;

            foreach (User admin in GetAdmins())
            {
                to = new MailboxAddress(admin.DisplayName, admin.Email);
                message.To.Add(to);

                message.Subject = $"{wr.User.DisplayName} is requesting a new website to be added to Let's Eat Import.";

                body.HtmlBody = $"<h1>Hi {admin.DisplayName}</h1><p>The user {wr.User.DisplayName} just tried to import a recipe from {wr.BaseURL}. You should add this website asap and mark it as completed.</p>";
                message.Body  = body.ToMessageBody();

                output = Connect() && Send() ? true : false;
            }

            return(output);
        }
Пример #13
0
        public List <WebsiteRequest> GetNewWebsiteRequests()
        {
            List <WebsiteRequest> output = new List <WebsiteRequest>();

            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    SqlCommand    cmd    = new SqlCommand(SQL_Get_New_Websites, conn);
                    SqlDataReader reader = cmd.ExecuteReader();


                    while (reader.Read())
                    {
                        WebsiteRequest wr = new WebsiteRequest();
                        wr.Id      = Convert.ToInt32(reader["id"]);
                        wr.BaseURL = Convert.ToString(reader["base_url"]);
                        wr.FullURL = Convert.ToString(reader["full_url"]);
                        wr.User    = new User()
                        {
                            Id = Convert.ToInt32(reader["user_id"])
                        };

                        output.Add(wr);
                    }
                    reader.Close();

                    foreach (WebsiteRequest wr in output)
                    {
                        wr.User = userDAL.GetUser(wr.User.Id, conn);
                    }
                }
            }
            catch
            {
                output = null;
            }

            return(output);
        }
        public void ChainedWebsiteCreate()
        {
            using (var client = TestHelper.ClientGet())
            {
                // Create a contact, chain website.
                var myWebsite = new WebsiteRequest {
                    Url = "http://smurf.com"
                };

                var result = client.ContactSave(TestHelper.ApiKey, TestHelper.SiteKey,
                                                new ContactRequest
                {
                    ContactType        = ContactType.Individual,
                    LastName           = "Smurf",
                    FirstName          = "Smul",
                    ExternalIdentifier = "Test_External_Smurf",
                    ApiOptions         = new ApiOptions {
                        Match = "external_identifier"
                    },
                    WebsiteSaveRequest = new List <WebsiteRequest> {
                        myWebsite
                    }
                });
                Debug.Assert(result.Id.HasValue);

                // Get contact with websites
                var contact = client.ContactGetSingle(TestHelper.ApiKey, TestHelper.SiteKey,
                                                      new ContactRequest {
                    Id = result.Id.Value, WebsiteGetRequest = new WebsiteRequest()
                });

                Assert.AreEqual(result.Id, contact.Id);
                Assert.AreEqual(1, contact.WebsiteResult.Count);
                Assert.AreEqual(myWebsite.Url, contact.WebsiteResult.Values.First().Url);

                // Delete contact

                client.ContactDelete(TestHelper.ApiKey, TestHelper.SiteKey, new DeleteRequest(result.Id.Value), 1);
            }
        }
Пример #15
0
        public void OffsetOption()
        {
            using (var client = TestHelper.ClientGet())
            {
                var website1 = new WebsiteRequest
                {
                    ContactId   = _myContactId,
                    Url         = "http://blog.johanv.org",
                    WebsiteType = WebsiteType.Main
                };
                var website2 = new WebsiteRequest
                {
                    ContactId   = _myContactId,
                    Url         = "http://civicrm.org",
                    WebsiteType = WebsiteType.Main
                };
                var website3 = new WebsiteRequest
                {
                    ContactId   = _myContactId,
                    Url         = "http://www.chiro.be",
                    WebsiteType = WebsiteType.Main
                };


                client.WebsiteSave(TestHelper.ApiKey, TestHelper.SiteKey, website1);
                client.WebsiteSave(TestHelper.ApiKey, TestHelper.SiteKey, website2);
                client.WebsiteSave(TestHelper.ApiKey, TestHelper.SiteKey, website3);

                var result = client.WebsiteGet(TestHelper.ApiKey, TestHelper.SiteKey,
                                               new WebsiteRequest {
                    ContactId = _myContactId, ApiOptions = new ApiOptions {
                        Sort = "url", Offset = 2
                    }
                });

                Assert.AreEqual(0, result.IsError);
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(website3.Url, result.Values.First().Url);
            }
        }
Пример #16
0
        public IActionResult ParseUrl(ParseURLForm form)
        {
            ObjectResult output = StatusCode(500, error.ParseUrl);

            if (authProvider.IsLoggedIn)
            {
                User currentUser = authProvider.GetCurrentUser();

                if (form.IsSupportedWebsite())
                {
                    Recipe newRecipe = form.Parse();
                    newRecipe.UserWhoAdded = currentUser;
                    newRecipe = recipeDAL.AddRecipe(newRecipe);

                    if (newRecipe != null)
                    {
                        output = StatusCode(200, newRecipe);
                    }
                }
                else
                {
                    WebsiteRequest wr = form.GenerateWebsiteRequest();
                    wr.User = currentUser;
                    websiteRequestDAL.AddNewWebsiteRequest(wr);

                    emailProvider.NewWebsiteRequest(wr);


                    output = StatusCode(501, wr);
                }
            }
            else
            {
                output = StatusCode(401, error.NotLoggedIn);
            }

            return(output);
        }
Пример #17
0
        public IActionResult ParseUrl(ParseURLForm form)
        {
            if (authProvider.IsLoggedIn)
            {
                User currentUser = authProvider.GetCurrentUser();

                if (form.IsSupportedWebsite())
                {
                    Recipe newRecipe = form.Parse();
                    newRecipe.UserWhoAdded = currentUser;
                    newRecipe = recipeDAL.AddRecipe(newRecipe);

                    if (newRecipe != null)
                    {
                        return(RedirectToAction("Recipe", new { id = newRecipe.ID }));
                    }
                    else
                    {
                        return(View("Error"));
                    }
                }
                else
                {
                    WebsiteRequest wr = form.GenerateWebsiteRequest();
                    wr.User = currentUser;
                    websiteRequestDAL.AddNewWebsiteRequest(wr);

                    emailProvider.NewWebsiteRequest(wr);


                    return(View("WebsiteRequestAdded", wr));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Account"));
            }
        }
Пример #18
0
        public WebsiteRequest Get(int id)
        {
            WebsiteRequest output = new WebsiteRequest();

            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();

                    SqlCommand cmd = new SqlCommand(SQL_Get_Request_By_ID, conn);
                    cmd.Parameters.AddWithValue("@id", id);

                    SqlDataReader reader = cmd.ExecuteReader();

                    if (reader.Read())
                    {
                        output.Id      = Convert.ToInt32(reader["id"]);
                        output.BaseURL = Convert.ToString(reader["base_url"]);
                        output.FullURL = Convert.ToString(reader["full_url"]);
                        output.User    = new User()
                        {
                            Id = Convert.ToInt32(reader["user_id"])
                        };
                    }

                    reader.Close();

                    output.User = userDAL.GetUser(output.User.Id, conn);
                }
            }
            catch
            {
                output = null;
            }

            return(output);
        }
Пример #19
0
        public bool WebsiteRequestComplete(WebsiteRequest wr)
        {
            bool output = false;

            try
            {
                to = new MailboxAddress(wr.User.DisplayName, wr.User.Email);
                message.To.Add(to);

                message.Subject = $"Your request to add {wr.BaseURL} to our recipe import is complete!";

                body.HtmlBody = $"<h1>Hi {wr.User.DisplayName}</h1><p>Thank you for your patience while we added the capability to import recipes from {wr.BaseURL}. I am glad to inform you that this website has now been added to Let's Eat! You can now try and import this recipe again, as a reminder the recipe you were trying to add was <a href='{wr.FullURL}'>located here.</a></p> <p>Thanks again for your patience!</p><p>- Let's Eat Admin Team</p>";
                message.Body  = body.ToMessageBody();

                output = Connect() && Send() ? true : false;
            }
            catch
            {
                output = false;
            }

            return(output);
        }
Пример #20
0
        public bool AddNewWebsiteRequest(WebsiteRequest newRequest)
        {
            bool output = true;

            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(SQL_Add_New_Website_Request, conn);
                    cmd.Parameters.AddWithValue("@base_url", newRequest.BaseURL);
                    cmd.Parameters.AddWithValue("@full_url", newRequest.FullURL);
                    cmd.Parameters.AddWithValue("@user_id", newRequest.User.Id);

                    cmd.ExecuteNonQuery();
                }
            }
            catch
            {
                output = false;
            }

            return(output);
        }
Пример #21
0
        public async Task <IActionResult> CreateWebsite([FromBody] WebsiteRequest command)
        {
            await _websiteHandler.HandleCreateRequest(command);

            return(Ok());
        }
Пример #22
0
        public async Task <Result <int, ErrorResponse> > HandleUpdateRequest(int websiteId, WebsiteRequest request)
        {
            var initialEntity = await _websiteRepositoty.GetById(websiteId);

            if (initialEntity is null)
            {
                return(Utility.ErrorResponseInt());
            }

            var entity = await GetEntity(request, initialEntity.FilePath);

            await _websiteRepositoty.Update(entity);

            return(new Result <int, ErrorResponse> {
                IsSuccess = true
            });
        }
Пример #23
0
        public async Task HandleCreateRequest(WebsiteRequest request)
        {
            var entity = await GetEntity(request);

            await _websiteRepositoty.Create(entity);
        }