コード例 #1
0
        /// <summary>
        /// A Utility method to Get all the Users from given SqlConnection and SqlCommand
        /// </summary>
        /// <param name="items">The RestaurantUser Collection which will be updated with Read Rows</param>
        /// <param name="cn">The SqlConnection object to use for Database connection</param>
        /// <param name="cmd">The SqlCommand object that will be used to retrive data</param>
        protected static void GetAllRecord(IList <RestaurantUser> items, SqlConnection cn, SqlCommand cmd)
        {
            cn.Open();
            var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

            while (rdr.Read())
            {
                var item = new RestaurantUser(rdr.TryGetDataAsInt(0), rdr.TryGetDataAsString(1), rdr.TryGetDataAsGuid(9))
                {
                    MobileNumber   = rdr.TryGetDataAsUInt64(2),
                    Address        = rdr.TryGetDataAsString(3),
                    EmailId        = rdr.TryGetDataAsString(4),
                    FacebookDetail = new FacebookUserDetailRepository().Find(rdr.TryGetDataAsUInt64(5)),
                    Password       = rdr.TryGetDataAsString(6),
                    UserRole       = (UserBase.RestaurantUserRole)rdr.TryGetDataAsInt(7),
                    LoginExpiresOn = rdr.TryGetDataAsDateTime(8)
                };

                items.Add(item);
            }
            if (!rdr.IsClosed)
            {
                rdr.Close();
            }
        }
コード例 #2
0
        public static FormsAuthenticationTicket MakeAuthTicket(RestaurantUser user, bool ispersistent)
        {
            var ticket = (FormsAuthenticationTicket)null;

            if (user != null)
            {
                //check if login has expired according to user instance, if it has then set loginexpire to new and correct datetime
                var loginexpiry = user.LoginExpiresOn.ToUniversalTime() < DateTime.UtcNow
                                            ? (user.UserRole == UserBase.RestaurantUserRole.Guest
                                                ? DateTime.UtcNow.AddMinutes(86400D)
                                                : DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout.TotalMinutes))
                                            : user.LoginExpiresOn.ToUniversalTime();
                ticket = new FormsAuthenticationTicket(1,                      // Version number
                                                       user.UserName,          //User unique name according to Membership database
                                                       DateTime.UtcNow,        //Time of creation
                                                       loginexpiry,            // Time of Ticket Expiry
                                                       ispersistent,           // Is ticket Persistent
                                                       SerializeUserdata(user) // Add user specific data like ID, UniqueId and Friendly Name
                                                       );
            }

            //Also set the loginexpireson datetime for user
            //if (ticket != null)
            //{
            //    user.LoginExpiresOn = ticket.Expiration;
            //    new RestaurantUserRepository().Update(user);
            //}

            return(ticket);
        }
コード例 #3
0
        public async Task <ActionResult> RegisterRestaurant(RegisterRestaurantViewModel model)
        {
            if (this.ModelState.IsValid)
            {
                var db = new PlacesToEatDbContext();

                var categoryId = db.Categories.Where(x => x.Name == "All").Select(x => x.Id).FirstOrDefault();

                var user = new RestaurantUser {
                    UserName = model.UserName, Email = model.Email, PhoneNumber = model.PhoneNumber, Name = model.Name, Address = model.Address, Latitude = model.Latitude, Longitude = model.Longitude, CategoryId = categoryId
                };
                var result = await this.UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    await this.UserManager.AddToRoleAsync(user.Id, "Restaurant");

                    await this.SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
                    return(this.RedirectToAction("Index", "Home"));
                }

                this.AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(this.View(model));
        }
コード例 #4
0
        public void DetailsReturnsValidRestaurantDetailedViewModelId()
        {
            //Arrange
            var restaurantId       = Guid.NewGuid().ToString();
            var resultDbRestaurant = new RestaurantUser
            {
                Id = restaurantId
            };

            var mockedRestaurantUserService = new Mock <IRestaurantUserService>();

            mockedRestaurantUserService.Setup(x => x.GetById(restaurantId)).Returns(resultDbRestaurant);

            var autoMapperConfig = new AutoMapperConfig();

            autoMapperConfig.Execute(typeof(RestaurantController).Assembly);

            var restaurantController = new RestaurantController(mockedRestaurantUserService.Object, null);

            //Act
            var actionResult        = restaurantController.Details(restaurantId) as ViewResult;
            var restaurantViewModel = (RestaurantDetailedViewModel)actionResult.ViewData.Model;

            var expectedRestaurantViewModel = new RestaurantDetailedViewModel
            {
                Id = resultDbRestaurant.Id
            };

            //Assert
            Assert.AreEqual(expectedRestaurantViewModel.Id, restaurantViewModel.Id, "Expected RestaurantDetailedViewModel Id doesn`t match actual Id.");
        }
コード例 #5
0
        private void TryCreateFirstAdmin()
        {
            if (Membership.Provider.GetUser("*****@*****.**", false) != null)
            {
                return;
            }

            try
            {
                var firstadmin = new RestaurantUser(0, "Mr. Spock", Guid.NewGuid())
                {
                    UserRole     = UserBase.RestaurantUserRole.Admin,
                    EmailId      = "*****@*****.**",
                    Password     = "******",
                    Address      = "On Starship Enterprise, The Advanced FTL Fighter Ship, Crusing through space, going places where no one has gone before :)",
                    MobileNumber = 9876543210
                };
                MembershipCreateStatus status;
                ((Infrastructure.Providers.CustomSqlMembershipProviderWrapper)Membership.Provider).CreateUser(
                    firstadmin, out status, null, null);
            }
            // ReSharper disable EmptyGeneralCatchClause
            catch {}
            // ReSharper restore EmptyGeneralCatchClause
        }
コード例 #6
0
        public async Task <IHttpActionResult> PostRestaurantUser(RestaurantUser restaurantUser)
        {
            restaurantUser.UserId = Guid.NewGuid().ToString();

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _db.RestaurantUsers.Add(restaurantUser);

            try
            {
                await _db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (RestaurantUserExists(restaurantUser.UserId))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtRoute("DefaultApi", new { id = restaurantUser.UserId }, restaurantUser));
        }
コード例 #7
0
        public async Task <IHttpActionResult> PutRestaurantUser(string userId, Delta <RestaurantUser> patch)
        {
            RestaurantUser restaurantUser = await _db.RestaurantUsers.FindAsync(userId);

            if (restaurantUser == null)
            {
                return(NotFound());
            }

            try
            {
                patch.Patch(restaurantUser);
                _db.Entry(restaurantUser).State = EntityState.Modified;
                await _db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RestaurantUserExists(userId))
                {
                    return(NotFound());
                }
                throw;
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
コード例 #8
0
 public void SignIn(RestaurantUser user, bool createPersistentCookie)
 {
     if (user == null)
     {
         throw new ArgumentNullException("user", "Value cannot be null or empty");
     }
     FormsAuthenticationHelper.SetAuthCookie(user, createPersistentCookie);
 }
コード例 #9
0
        public void Delete(Guid id)
        {
            RestaurantUser User = new RestaurantUser
            {
                Id = id
            };

            _restaurantUserRepository.Delete(User);
            _restaurantUserRepository.Save();
        }
コード例 #10
0
        public virtual RestaurantUser CreateUser(RestaurantUser user, out MembershipCreateStatus status, string secretQuestion, string secretAnswer)
        {
            //users will be stored as GUID as their providerkey in Membership database and with
            //Real name in Restaurant Database
            RestaurantMembershipUser = user;
            CheckRestaurantMembershipUser();
            MembershipUser sqlresult;
            var            repoIdresult = -1;

            // Guest user will have their GUID as their username and Password because Guest user can never log in,
            // he is automatically logged in through his authentication ticket, so this will always be an internal call
            // Also since all user needs to have a valid email id except Guest user, we are using guid as dummy email
            if (user.UserRole == UserBase.RestaurantUserRole.Guest)
            {
                sqlresult = base.CreateUser(user.UserGuid.ToString(), user.UserGuid.ToString(), user.UserGuid.ToString() + "@guestuser.com", null, null,
                                            true, user.UserGuid, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    //Login Expiration for a Guset user is set to 86400 Minutes, ie 60 days
                    user.LoginExpiresOn = DateTime.UtcNow.AddMinutes(86400D);
                    user.Password       = user.UserGuid.ToString();
                    repoIdresult        = UserRepository.Add(user);
                }
            }
            //Facebook user will have their id as username and UserGuid as password
            else if (user.FacebookDetail != null && user.FacebookDetail.FacebookId > 0 && !user.FacebookDetail.OAuthToken.IsNullOrEmpty())
            {
                sqlresult = base.CreateUser(user.FacebookDetail.FacebookId.ToString(), user.UserGuid.ToString(),
                                            user.EmailId, null, null, true, user.UserGuid, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    user.Password       = user.UserGuid.ToString();
                    user.LoginExpiresOn = user.FacebookDetail.ExpiresOn;
                    repoIdresult        = UserRepository.Add(user);
                }
            }
            //For every one else the user creation is normal
            else
            {
                sqlresult = base.CreateUser(user.EmailId, user.Password, user.EmailId,
                                            secretQuestion, secretAnswer, true, user.UserGuid, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    user.LoginExpiresOn = DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout.TotalMinutes);
                    repoIdresult        = UserRepository.Add(user);
                }
            }
            if (status == MembershipCreateStatus.Success && sqlresult != null && repoIdresult > 0)
            {
                return(new RestaurantUser(repoIdresult, user.Name, user.UserGuid, user.MobileNumber, user.LoginExpiresOn,
                                          user.UserRole, user.Address, user.EmailId, user.Password, user.FacebookDetail,
                                          sqlresult));
            }
            return(null);
        }
コード例 #11
0
        public RestaurantUser CreateUser(RestaurantUser user, out MembershipCreateStatus status, string secretQuestion, string secretAnswer)
        {
            var result = (RestaurantUser)null;

            status = MembershipCreateStatus.ProviderError;
            if (_provider is CustomSqlMembershipProviderWrapper)
            {
                result = (_provider as CustomSqlMembershipProviderWrapper).CreateUser(user, out status, secretQuestion, secretAnswer);
            }
            return(result);
        }
コード例 #12
0
        public void Should_ReturnRestaurantClaims_Given_RestaurantAccountType()
        {
            // Arrange
            var accountType = AccountTypes.Restaurant;

            // Act
            var result   = factory.Create(accountType);
            var expected = new RestaurantUser().Claims;

            // Assert
            result.Should().BeEquivalentTo(expected);
        }
コード例 #13
0
        public void Create(RestaurantUserCreateModel entity)
        {
            RestaurantUser restaurantUser = new RestaurantUser
            {
                Id        = new Guid(),
                User      = entity.User,
                Password  = entity.Password,
                Email     = entity.Email,
                Privilege = RestaurantUser.PrivilegeValues.None,
            };

            _restaurantUserRepository.Create(restaurantUser);
            _restaurantUserRepository.Save();
        }
コード例 #14
0
        public void Update(RestaurantUserUpdateModel entity)
        {
            RestaurantUser restaurantUser = new RestaurantUser
            {
                Id           = entity.Id,
                User         = entity.User,
                Password     = entity.Password,
                Email        = entity.Email,
                RestaurantId = entity.RestaurantId
            };

            _restaurantUserRepository.Update(restaurantUser);
            _restaurantUserRepository.Save();
        }
コード例 #15
0
        public async Task <IHttpActionResult> DeleteRestaurantUser(string id)
        {
            RestaurantUser restaurantUser = await _db.RestaurantUsers.FindAsync(id);

            if (restaurantUser == null)
            {
                return(NotFound());
            }

            _db.RestaurantUsers.Remove(restaurantUser);
            await _db.SaveChangesAsync();

            return(Ok(restaurantUser));
        }
コード例 #16
0
        public async Task <IActionResult> Create([Bind("Id,RestaurantId")] RestaurantUser restaurantUser)
        {
            ModelState.Remove("UserId");
            if (ModelState.IsValid)
            {
                var user = await GetUserAsync();

                restaurantUser.UserId = user.Id;
                _context.Add(restaurantUser);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index", "Restaurants"));
            }
            ViewData["RestaurantId"] = new SelectList(_context.Restaurants, "Id", "RestaurantId", restaurantUser.RestaurantId);
            return(View(restaurantUser));
        }
コード例 #17
0
        public void DetailsReturnsValidRestaurantDetailedViewModelComments()
        {
            //Arrange
            var restaurantId = Guid.NewGuid().ToString();

            var comments = new List <Comment>
            {
                new Comment
                {
                    Author = new RegularUser()
                    {
                        FirstName = "Test",
                        LastName  = "User1"
                    }
                }
            };

            var resultDbRestaurant = new RestaurantUser
            {
                Comments = comments
            };

            var mockedRestaurantUserService = new Mock <IRestaurantUserService>();

            mockedRestaurantUserService.Setup(x => x.GetById(restaurantId)).Returns(resultDbRestaurant);

            var autoMapperConfig = new AutoMapperConfig();

            autoMapperConfig.Execute(typeof(RestaurantController).Assembly);

            var restaurantController = new RestaurantController(mockedRestaurantUserService.Object, null);

            //Act
            var actionResult        = restaurantController.Details(restaurantId) as ViewResult;
            var restaurantViewModel = (RestaurantDetailedViewModel)actionResult.ViewData.Model;

            var expectedRestaurantViewModel = new RestaurantDetailedViewModel
            {
                Comments = resultDbRestaurant.Comments.AsQueryable().To <CommentViewModel>().ToList()
            };

            //Assert
            Assert.AreEqual(restaurantViewModel.Comments.Count, expectedRestaurantViewModel.Comments.Count, "Expected RestaurantDetailedViewModel Comments count doesn`t match actual count.");
            Assert.AreEqual(restaurantViewModel.Comments.FirstOrDefault().Author, expectedRestaurantViewModel.Comments.FirstOrDefault().Author, "Expected RestaurantDetailedViewModel comment Author doesn`t match the actual Author.");
        }
コード例 #18
0
        private static RestaurantUser CombineResult(RestaurantUser restaurantresult, MembershipUser sqlresult)
        {
            var result = (RestaurantUser)null;

            if (restaurantresult != null && sqlresult != null)
            {
                result = new RestaurantUser(restaurantresult.UserId,
                                            restaurantresult.Name,
                                            restaurantresult.UserGuid,
                                            restaurantresult.MobileNumber,
                                            restaurantresult.LoginExpiresOn,
                                            restaurantresult.UserRole,
                                            restaurantresult.Address,
                                            restaurantresult.EmailId,
                                            restaurantresult.Password,
                                            restaurantresult.FacebookDetail,
                                            sqlresult
                                            );
            }
            return(result);
        }
コード例 #19
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var user = new RestaurantUser {
                    UserName = Input.Email, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { userId = user.Id, code = code },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                                      $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    await _signInManager.SignInAsync(user, isPersistent : false);

                    return(LocalRedirect(returnUrl));
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
コード例 #20
0
        public void DetailsReturnsValidRestaurantDetailedViewModelFavourites()
        {
            //Arrange
            var restaurantId = Guid.NewGuid().ToString();

            var regularUsers = new List <RegularUser>
            {
                new RegularUser(),
                new RegularUser()
            };

            var resultDbRestaurant = new RestaurantUser
            {
                RegularUsers = regularUsers
            };

            var mockedRestaurantUserService = new Mock <IRestaurantUserService>();

            mockedRestaurantUserService.Setup(x => x.GetById(restaurantId)).Returns(resultDbRestaurant);

            var autoMapperConfig = new AutoMapperConfig();

            autoMapperConfig.Execute(typeof(RestaurantController).Assembly);

            var restaurantController = new RestaurantController(mockedRestaurantUserService.Object, null);

            //Act
            var actionResult        = restaurantController.Details(restaurantId) as ViewResult;
            var restaurantViewModel = (RestaurantDetailedViewModel)actionResult.ViewData.Model;

            var expectedRestaurantViewModel = new RestaurantDetailedViewModel
            {
                Favourites = resultDbRestaurant.RegularUsers.AsQueryable().To <RegularUserViewModel>().ToList(),
            };

            //Assert
            Assert.AreEqual(restaurantViewModel.Favourites.Count, expectedRestaurantViewModel.Favourites.Count, "Expected RestaurantDetailedViewModel Favourites count doesn`t match actual count.");
        }
コード例 #21
0
        public static void SeedData(AppDbContext context)
        {
            var categories = new Category[]
            {
                new Category()
                {
                    Name = "Sushi",
                    Id   = new Guid("00000000-0000-0000-0000-000000000001")
                },
                new Category()
                {
                    Name = "Burger",
                    Id   = new Guid("00000000-0000-0000-0000-000000000002")
                },
                new Category()
                {
                    Name = "Pasta",
                    Id   = new Guid("00000000-0000-0000-0000-000000000003")
                },
                new Category()
                {
                    Name = "Pizza",
                    Id   = new Guid("00000000-0000-0000-0000-000000000004")
                },
                new Category()
                {
                    Name = "Vegan",
                    Id   = new Guid("00000000-0000-0000-0000-000000000005")
                },
                new Category()
                {
                    Name = "Healthy",
                    Id   = new Guid("00000000-0000-0000-0000-000000000006")
                },
                new Category()
                {
                    Name = "Dessert",
                    Id   = new Guid("00000000-0000-0000-0000-000000000007")
                },
                new Category()
                {
                    Name = "Noodles",
                    Id   = new Guid("00000000-0000-0000-0000-000000000008")
                },
                new Category()
                {
                    Name = "Breakfast",
                    Id   = new Guid("00000000-0000-0000-0000-000000000009")
                },
                new Category()
                {
                    Name = "Smoothie",
                    Id   = new Guid("00000000-0000-0000-0000-000000000010")
                },
                new Category()
                {
                    Name = "Kebab",
                    Id   = new Guid("00000000-0000-0000-0000-000000000011")
                },
                new Category()
                {
                    Name = "Salad",
                    Id   = new Guid("00000000-0000-0000-0000-000000000012")
                },
                new Category()
                {
                    Name = "Vegetarian",
                    Id   = new Guid("00000000-0000-0000-0000-000000000013")
                },
                new Category()
                {
                    Name = "Ramen",
                    Id   = new Guid("00000000-0000-0000-0000-000000000014")
                },
                new Category()
                {
                    Name = "Smoothie",
                    Id   = new Guid("00000000-0000-0000-0000-000000000015")
                },
                new Category()
                {
                    Name = "Kebab",
                    Id   = new Guid("00000000-0000-0000-0000-000000000016")
                },
                new Category()
                {
                    Name = "Salad",
                    Id   = new Guid("00000000-0000-0000-0000-000000000017")
                },
                new Category()
                {
                    Name = "Mexican",
                    Id   = new Guid("00000000-0000-0000-0000-000000000018")
                },
                new Category()
                {
                    Name = "Thai",
                    Id   = new Guid("00000000-0000-0000-0000-000000000019")
                },
                new Category()
                {
                    Name = "Italian",
                    Id   = new Guid("00000000-0000-0000-0000-000000000020")
                },
                new Category()
                {
                    Name = "Indian",
                    Id   = new Guid("00000000-0000-0000-0000-000000000021")
                },
                new Category()
                {
                    Name = "Japanese",
                    Id   = new Guid("00000000-0000-0000-0000-000000000022")
                },
                new Category()
                {
                    Name = "American",
                    Id   = new Guid("00000000-0000-0000-0000-000000000023")
                },
                new Category()
                {
                    Name = "Chinese",
                    Id   = new Guid("00000000-0000-0000-0000-000000000024")
                },
                new Category()
                {
                    Name = "Vietnamese",
                    Id   = new Guid("00000000-0000-0000-0000-000000000025")
                },
                new Category()
                {
                    Name = "Nepalese",
                    Id   = new Guid("00000000-0000-0000-0000-000000000026")
                },
                new Category()
                {
                    Name = "Georgian",
                    Id   = new Guid("00000000-0000-0000-0000-000000000027")
                },
                new Category()
                {
                    Name = "Street Food",
                    Id   = new Guid("00000000-0000-0000-0000-000000000028")
                },
                new Category()
                {
                    Name = "Steak",
                    Id   = new Guid("00000000-0000-0000-0000-000000000029")
                },
                new Category()
                {
                    Name = "Mediterranean",
                    Id   = new Guid("00000000-0000-0000-0000-000000000030")
                },
                new Category()
                {
                    Name = "Sandwich",
                    Id   = new Guid("00000000-0000-0000-0000-000000000031")
                },
                new Category()
                {
                    Name = "Soup",
                    Id   = new Guid("00000000-0000-0000-0000-000000000032")
                },
                new Category()
                {
                    Name = "Fish",
                    Id   = new Guid("00000000-0000-0000-0000-000000000033")
                },
                new Category()
                {
                    Name = "Cafe",
                    Id   = new Guid("00000000-0000-0000-0000-000000000034")
                },
                new Category()
                {
                    Name = "Tapas",
                    Id   = new Guid("00000000-0000-0000-0000-000000000035")
                }
            };

            foreach (var category in categories)
            {
                if (!context.Categories.Any(l => l.Id == category.Id))
                {
                    context.Categories.Add(category);
                }
            }

            context.SaveChanges();

            var restaurants = new Restaurant[]
            {
                new Restaurant()
                {
                    Name         = "KFC Kristiine",
                    Phone        = "550 1234",
                    Address      = "Endla 45",
                    DeliveryCost = 3,
                    Id           = new Guid("00000000-0000-0000-0000-000000000001"),
                },
                new Restaurant()
                {
                    Name         = "Burger King Rocca al Mare",
                    Phone        = "665 9345",
                    Address      = "Paldiski maantee 102",
                    DeliveryCost = 3,
                    Id           = new Guid("00000000-0000-0000-0000-000000000002")
                },
                new Restaurant()
                {
                    Name         = "McDonald's Mustamäe",
                    Phone        = "5561 7012",
                    Address      = " A. H. Tammsaare tee 76",
                    DeliveryCost = 3,
                    Id           = new Guid("00000000-0000-0000-0000-000000000003")
                },
                new Restaurant()
                {
                    Name         = "Dodo Pizza Sõpruse pst.",
                    Phone        = "629 9209",
                    Address      = "Sõpruse pst. 211a",
                    DeliveryCost = 3,
                    Id           = new Guid("00000000-0000-0000-0000-000000000004")
                },
            };

            foreach (var restaurant in restaurants)
            {
                if (!context.Restaurants.Any(l => l.Id == restaurant.Id))
                {
                    context.Restaurants.Add(restaurant);
                }
            }

            var addresses = new Address[]
            {
                new Address()
                {
                    County         = "Harjumaa",
                    City           = "Tallinn",
                    Street         = "Akadeemia tee",
                    BuildingNumber = "7/2",
                    Apartment      = "201b",
                    Name           = "Uhikas",
                    AppUserId      = new Guid("00000000-0000-0000-0000-000000000002"),
                    Id             = new Guid("00000000-0000-0000-0000-000000000001")
                },
                new Address()
                {
                    County         = "Harjumaa",
                    City           = "Tallinn",
                    Street         = "Sõpruse pst.",
                    BuildingNumber = "212",
                    Apartment      = "27",
                    Name           = "Home",
                    AppUserId      = new Guid("00000000-0000-0000-0000-000000000004"),
                    Id             = new Guid("00000000-0000-0000-0000-000000000002")
                },
            };

            foreach (var address in addresses)
            {
                if (!context.Addresses.Any(l => l.Id == address.Id))
                {
                    context.Addresses.Add(address);
                }
            }

            context.SaveChanges();

            var restaurantUsers = new RestaurantUser[]
            {
                new RestaurantUser()
                {
                    RestaurantId = new Guid("00000000-0000-0000-0000-000000000001"),
                    AppUserId    = new Guid("00000000-0000-0000-0000-000000000004"),
                    Id           = new Guid("00000000-0000-0000-0000-000000000001")
                },
                new RestaurantUser()
                {
                    RestaurantId = new Guid("00000000-0000-0000-0000-000000000002"),
                    AppUserId    = new Guid("00000000-0000-0000-0000-000000000005"),
                    Id           = new Guid("00000000-0000-0000-0000-000000000002")
                },
            };

            foreach (var restaurantUser in restaurantUsers)
            {
                if (!context.RestaurantUsers.Any(l => l.Id == restaurantUser.Id))
                {
                    context.RestaurantUsers.Add(restaurantUser);
                }
            }

            context.SaveChanges();
        }
コード例 #22
0
        protected override void Seed(PlacesToEatDbContext context)
        {
            var userManager = new UserManager <User>(new UserStore <User>(context));
            var roleManager = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));

            if (!roleManager.Roles.Any())
            {
                roleManager.Create(new IdentityRole {
                    Name = "Regular"
                });
                roleManager.Create(new IdentityRole {
                    Name = "Restaurant"
                });
                roleManager.Create(new IdentityRole {
                    Name = "Administrator"
                });
            }

            userManager.PasswordValidator = new PasswordValidator
            {
                RequiredLength          = 4,
                RequireNonLetterOrDigit = false,
                RequireDigit            = false,
                RequireLowercase        = false,
                RequireUppercase        = false,
            };

            if (!context.Categories.Any())
            {
                var category = new Category
                {
                    Name = "All"
                };

                context.Categories.Add(category);

                category = new Category
                {
                    Name = "Fast Food"
                };

                context.Categories.Add(category);

                category = new Category
                {
                    Name = "Casual"
                };

                context.Categories.Add(category);

                category = new Category
                {
                    Name = "Steak House"
                };

                context.Categories.Add(category);

                category = new Category
                {
                    Name = "Bar"
                };

                context.Categories.Add(category);

                category = new Category
                {
                    Name = "Chinese Food"
                };

                context.Categories.Add(category);

                category = new Category
                {
                    Name = "Italian Food"
                };

                context.Categories.Add(category);

                category = new Category
                {
                    Name = "Pizza"
                };

                context.Categories.Add(category);

                context.SaveChanges();
            }

            var initialUser = userManager.Users.FirstOrDefault(x => x.UserName == "admin");

            if (initialUser == null)
            {
                var user = new User
                {
                    UserName = "******"
                };

                var result = userManager.Create(user, "admin");

                userManager.AddToRole(user.Id, "Administrator");

                user = new RegularUser
                {
                    FirstName = "User",
                    LastName  = "Testov",
                    UserName  = "******"
                };

                result = userManager.Create(user, "user");

                if (result.Succeeded)
                {
                    userManager.AddToRole(user.Id, "Regular");
                }

                user = new RegularUser
                {
                    FirstName = "Pesho",
                    LastName  = "Peshov",
                    UserName  = "******"
                };

                result = userManager.Create(user, "pesho");

                if (result.Succeeded)
                {
                    userManager.AddToRole(user.Id, "Regular");
                }

                var restaurant = new RestaurantUser
                {
                    Name        = @"Happy ""Александър Малинов""",
                    UserName    = "******",
                    Address     = @"бул. ""Александър Малинов"" 37, 1729 София",
                    Email       = "*****@*****.**",
                    PhoneNumber = "088 818 1072",
                    Latitude    = 42.6480622000956,
                    Longitude   = 23.3790537714958,
                    CategoryId  = 1
                };

                result = userManager.Create(restaurant, "123456");

                if (result.Succeeded)
                {
                    userManager.AddToRole(restaurant.Id, "Restaurant");
                }

                restaurant = new RestaurantUser
                {
                    Name        = @"McDonalds ""Александър Малинов""",
                    UserName    = "******",
                    Address     = @"Бул. Ал. Малинов, Срещу Нова Деница, София",
                    Email       = "*****@*****.**",
                    PhoneNumber = "088 400 0310",
                    Latitude    = 42.6472434650249,
                    Longitude   = 23.3757828176022,
                    CategoryId  = 2
                };

                result = userManager.Create(restaurant, "123456");

                if (result.Succeeded)
                {
                    userManager.AddToRole(restaurant.Id, "Restaurant");
                }

                restaurant = new RestaurantUser
                {
                    Name        = @"Хепи голдън (Син Жон ООД)",
                    UserName    = "******",
                    Address     = @"София, бул. Ал.Малинов",
                    Email       = "*****@*****.**",
                    PhoneNumber = "02 975 3688",
                    Latitude    = 42.6512995505691,
                    Longitude   = 23.3781887590885,
                    CategoryId  = 1
                };

                result = userManager.Create(restaurant, "123456");

                if (result.Succeeded)
                {
                    userManager.AddToRole(restaurant.Id, "Restaurant");
                }

                restaurant = new RestaurantUser
                {
                    Name        = @"ПИЦИ ФРИЦИ",
                    UserName    = "******",
                    Address     = @"жк Младост-1а 510,1729 София,България",
                    Email       = "*****@*****.**",
                    PhoneNumber = "+359 2 974 3058",
                    Latitude    = 42.6488631690378,
                    Longitude   = 23.3802500367165,
                    CategoryId  = 8
                };

                result = userManager.Create(restaurant, "123456");

                if (result.Succeeded)
                {
                    userManager.AddToRole(restaurant.Id, "Restaurant");
                }

                context.SaveChanges();
            }
        }
コード例 #23
0
 /// <param name='operations'>
 /// Reference to the RestaurantClient.IRestaurantUsers.
 /// </param>
 /// <param name='restaurantUser'>
 /// Required.
 /// </param>
 public static RestaurantUser PostRestaurantUserByRestaurantuser(this IRestaurantUsers operations, RestaurantUser restaurantUser)
 {
     return(Task.Factory.StartNew((object s) =>
     {
         return ((IRestaurantUsers)s).PostRestaurantUserByRestaurantuserAsync(restaurantUser);
     }
                                  , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }
コード例 #24
0
        /// <param name='restaurantUser'>
        /// Required.
        /// </param>
        /// <param name='cancellationToken'>
        /// Cancellation token.
        /// </param>
        public async Task <HttpOperationResponse <RestaurantUser> > PostRestaurantUserByRestaurantuserWithOperationResponseAsync(RestaurantUser restaurantUser, CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // Validate
            if (restaurantUser == null)
            {
                throw new ArgumentNullException("restaurantUser");
            }

            // Tracing
            bool   shouldTrace  = ServiceClientTracing.IsEnabled;
            string invocationId = null;

            if (shouldTrace)
            {
                invocationId = ServiceClientTracing.NextInvocationId.ToString();
                Dictionary <string, object> tracingParameters = new Dictionary <string, object>();
                tracingParameters.Add("restaurantUser", restaurantUser);
                ServiceClientTracing.Enter(invocationId, this, "PostRestaurantUserByRestaurantuserAsync", tracingParameters);
            }

            // Construct URL
            string url = "";

            url = url + "/api/RestaurantUsers";
            string baseUrl = this.Client.BaseUri.AbsoluteUri;

            // Trim '/' character from the end of baseUrl and beginning of url.
            if (baseUrl[baseUrl.Length - 1] == '/')
            {
                baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
            }
            if (url[0] == '/')
            {
                url = url.Substring(1);
            }
            url = baseUrl + "/" + url;
            url = url.Replace(" ", "%20");

            // Create HTTP transport objects
            HttpRequestMessage httpRequest = new HttpRequestMessage();

            httpRequest.Method     = HttpMethod.Post;
            httpRequest.RequestUri = new Uri(url);

            // Set Headers

            // Set Credentials
            if (this.Client.Credentials != null)
            {
                cancellationToken.ThrowIfCancellationRequested();
                await this.Client.Credentials.ProcessHttpRequestAsync(httpRequest, cancellationToken).ConfigureAwait(false);
            }

            // Serialize Request
            string requestContent = null;
            JToken requestDoc     = restaurantUser.SerializeJson(null);

            requestContent      = requestDoc.ToString(Newtonsoft.Json.Formatting.Indented);
            httpRequest.Content = new StringContent(requestContent, Encoding.UTF8);
            httpRequest.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

            // Send Request
            if (shouldTrace)
            {
                ServiceClientTracing.SendRequest(invocationId, httpRequest);
            }
            cancellationToken.ThrowIfCancellationRequested();
            HttpResponseMessage httpResponse = await this.Client.HttpClient.SendAsync(httpRequest, cancellationToken).ConfigureAwait(false);

            if (shouldTrace)
            {
                ServiceClientTracing.ReceiveResponse(invocationId, httpResponse);
            }
            HttpStatusCode statusCode = httpResponse.StatusCode;

            cancellationToken.ThrowIfCancellationRequested();
            string responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

            if (statusCode != HttpStatusCode.OK)
            {
                HttpOperationException <object> ex = new HttpOperationException <object>();
                ex.Request  = httpRequest;
                ex.Response = httpResponse;
                ex.Body     = null;
                if (shouldTrace)
                {
                    ServiceClientTracing.Error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HttpOperationResponse <RestaurantUser> result = new HttpOperationResponse <RestaurantUser>();

            result.Request  = httpRequest;
            result.Response = httpResponse;

            // Deserialize Response
            if (statusCode == HttpStatusCode.OK)
            {
                RestaurantUser resultModel = new RestaurantUser();
                JToken         responseDoc = null;
                if (string.IsNullOrEmpty(responseContent) == false)
                {
                    responseDoc = JToken.Parse(responseContent);
                }
                if (responseDoc != null)
                {
                    resultModel.DeserializeJson(responseDoc);
                }
                result.Body = resultModel;
            }

            if (shouldTrace)
            {
                ServiceClientTracing.Exit(invocationId, result);
            }
            return(result);
        }
コード例 #25
0
        /// <param name='operations'>
        /// Reference to the RestaurantClient.IRestaurantUsers.
        /// </param>
        /// <param name='restaurantUser'>
        /// Required.
        /// </param>
        /// <param name='cancellationToken'>
        /// Cancellation token.
        /// </param>
        public static async Task <RestaurantUser> PostRestaurantUserByRestaurantuserAsync(this IRestaurantUsers operations, RestaurantUser restaurantUser, CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            Microsoft.Rest.HttpOperationResponse <RestaurantClient.Models.RestaurantUser> result = await operations.PostRestaurantUserByRestaurantuserWithOperationResponseAsync(restaurantUser, cancellationToken).ConfigureAwait(false);

            return(result.Body);
        }
コード例 #26
0
 public CustomSqlMembershipProviderWrapper(RestaurantUser restaurantUser)
 {
     UserRepository           = new RestaurantUserRepository();
     RestaurantMembershipUser = restaurantUser;
 }
コード例 #27
0
        //
        // GET: /OAuth/

        public ActionResult Authorize(string state)
        {
            if (TempData.Peek(TempDataStringResuorce.FacebookStateData) != null && CryptographyHelper.MatchOneTimeHash(TempData[TempDataStringResuorce.FacebookStateData].ToString(), state))
            {
                var query = new
                {
                    Code             = Request.QueryString["code"],
                    Error            = Request.QueryString["error"],
                    ErrorReason      = Request.QueryString["error_reason"],
                    ErrorDescription = Request.QueryString["error_description"]
                };
                if (query.Error != null && query.ErrorReason == "user_denied")
                {
                    TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification
                    {
                        Message = "It looks like you didn't Allowed us to Sign you in through Facebook, you can try again",
                        Result  = false,
                        State   = ActionResultNotification.MessageState.Error
                    };
                    return(RedirectToAction("LogIn", "Account"));
                }
                if (!query.Code.IsNullOrEmpty())
                {
                    var redirecturi = Url.AbsoluteAction("Authorize", "OAuth", null);
                    var request     =
                        WebRequest.Create(FacebookHelper.GetAccessTokenUrl(AppConfigHelper.FacebookAppId, redirecturi,
                                                                           AppConfigHelper.FacebookAppSecret, query.Code));
                    try
                    {
                        var response       = request.GetResponse();
                        var responsestream = response.GetResponseStream();
                        if (responsestream != null && response.ContentLength > 0)
                        {
                            var responsebody = new StreamReader(responsestream).ReadToEnd();
                            var token        = new
                            {
                                AccessToken = responsebody.Split('&').First().Split('=').Last(),
                                ExpiresOn   = DateTime.UtcNow.AddSeconds(Convert.ToDouble(responsebody.Split('&').Last().Split('=').Last()))
                            };
                            //Reuse varaibles to get User Details
                            request        = WebRequest.Create(FacebookHelper.GetFacebookNewUserUrl(token.AccessToken));
                            response       = request.GetResponse();
                            responsestream = response.GetResponseStream();
                            if (responsestream != null)
                            {
                                responsebody = new StreamReader(responsestream).ReadToEnd();
                                var facebookuser   = System.Web.Helpers.Json.Decode <FacebookUser>(responsebody);
                                var facebookdetail = new FacebookUserDetail()
                                {
                                    FacebookId  = facebookuser.id,
                                    ExpiresOn   = token.ExpiresOn,
                                    OAuthToken  = token.AccessToken,
                                    ProfileLink = facebookuser.link
                                };

                                //Try update with new facebookuser detail, if user dosent exist it will return false
                                //Though Membership class returns a status of Duplicate user, for now I am going with it
                                var restaurantuser = (RestaurantUser)null;
                                if (!new FacebookUserDetailRepository().Update(facebookdetail))
                                {
                                    restaurantuser = new RestaurantUser(0, facebookuser.name, Guid.NewGuid())
                                    {
                                        EmailId        = facebookuser.email,
                                        FacebookDetail = facebookdetail,
                                        UserRole       = UserBase.RestaurantUserRole.Customer
                                    };
                                    MembershipCreateStatus createstatus;
                                    restaurantuser = MembershipService.CreateUser(restaurantuser, out createstatus);
                                }
                                if (restaurantuser == null)
                                {
                                    restaurantuser = MembershipService.GetUser(facebookdetail.FacebookId.ToString(), true);
                                }
                                if (restaurantuser != null)
                                {
                                    //If all goes well Log the user in
                                    FormsService.SignIn(restaurantuser, true);
                                }
                            }
                            TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification
                            {
                                Message = "You have been successully Logged in",
                                Result  = true,
                                State   = ActionResultNotification.MessageState.Information
                            };
                            return(RedirectToAction("Index", "Home"));
                        }
                    }
                    catch (WebException exception)
                    {
                        return(ProcessResponseErrorRedirect(redirecturi, exception));
                    }
                }
            }
            return(RedirectToAction("Index", "Home"));
        }
コード例 #28
0
        public async Task<ActionResult> RegisterRestaurant(RegisterRestaurantViewModel model)
        {
            if (this.ModelState.IsValid)
            {
                var db = new PlacesToEatDbContext();

                var categoryId = db.Categories.Where(x => x.Name == "All").Select(x => x.Id).FirstOrDefault();

                var user = new RestaurantUser { UserName = model.UserName, Email = model.Email, PhoneNumber = model.PhoneNumber, Name = model.Name, Address = model.Address, Latitude = model.Latitude, Longitude = model.Longitude, CategoryId = categoryId };
                var result = await this.UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await this.UserManager.AddToRoleAsync(user.Id, "Restaurant");

                    await this.SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
                    return this.RedirectToAction("Index", "Home");
                }

                this.AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return this.View(model);
        }
コード例 #29
0
        public async Task <OperationResult> Register(string userName, string email, string password, Person profile, string role)
        {
            if (await UserManager.FindByEmailAsync(email) != null)
            {
                return new OperationResult()
                       {
                           Success = false, Message = $"User {email} already exists"
                       }
            }
            ;
            if (await UserManager.FindByNameAsync(userName) != null)
            {
                return new OperationResult()
                       {
                           Success = false, Message = $"User {userName} already exists"
                       }
            }
            ;
            using var transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions, TransactionScopeAsyncFlowOption.Enabled);
            try
            {
                var createPersonOperation = await _pbo.CreateAsync(profile);

                if (!createPersonOperation.Success)
                {
                    transactionScope.Dispose();
                    return(createPersonOperation);
                }
                var user = new RestaurantUser()
                {
                    Email    = email,
                    UserName = userName,
                    PersonId = profile.Id
                };
                var result = await UserManager.CreateAsync(user, password);

                if (!result.Succeeded)
                {
                    transactionScope.Dispose();
                    return(new OperationResult()
                    {
                        Success = false, Message = result.ToString()
                    });
                }
                var roleData = await RoleManager.FindByNameAsync(role);

                if (roleData == null)
                {
                    transactionScope.Dispose();
                    return(new OperationResult()
                    {
                        Success = false, Message = $"Role {role} does not exist"
                    });
                }
                var roleOpt = await UserManager.AddToRoleAsync(user, role);

                if (!roleOpt.Succeeded)
                {
                    transactionScope.Dispose();
                    return(new OperationResult()
                    {
                        Success = false, Message = roleOpt.ToString()
                    });
                }
                transactionScope.Complete();
                return(new OperationResult()
                {
                    Success = true
                });
            }
            catch (Exception e)
            {
                return(new OperationResult()
                {
                    Success = false, Exception = e
                });
            }
        }
コード例 #30
0
 public void UpdateUser(RestaurantUser user)
 {
     _provider.UpdateUser(user);
 }
コード例 #31
0
        private static void SeedDefaultAdminRolesAndTwoUsers(IServiceProvider serviceProvider)
        {
            var db = serviceProvider.GetService <RestaurantAppContext>();

            if (!db.Roles.AnyAsync().Result)
            {
                var roleManager = serviceProvider.GetService <RoleManager <IdentityRole> >();

                Task.Run(async() =>
                {
                    var adminRole  = AdminRole;
                    var waiterRole = WaiterRole;
                    var barmanRole = BarmanRole;
                    var chefRole   = ChefRole;

                    await roleManager.CreateAsync(new IdentityRole
                    {
                        Name = adminRole
                    });

                    await roleManager.CreateAsync(new IdentityRole
                    {
                        Name = waiterRole
                    });

                    await roleManager.CreateAsync(new IdentityRole
                    {
                        Name = barmanRole
                    });

                    await roleManager.CreateAsync(new IdentityRole
                    {
                        Name = chefRole
                    });
                }).Wait();
            }
            if (!db.Users.AnyAsync().Result)
            {
                var userManager = serviceProvider.GetService <UserManager <RestaurantUser> >();

                Task.Run(async() =>
                {
                    var adminPasswrod = "admin123";
                    var admin         = new RestaurantUser()
                    {
                        UserName  = "******",
                        Email     = "*****@*****.**",
                        FirstName = "Admin",
                        LastName  = "Adminov"
                    };

                    var waiterPassword = "******";
                    var waiter         = new RestaurantUser()
                    {
                        UserName  = "******",
                        Email     = "*****@*****.**",
                        FirstName = "Ivan",
                        LastName  = "Pticata"
                    };
                    var waiter2 = new RestaurantUser()
                    {
                        UserName  = "******",
                        Email     = "*****@*****.**",
                        FirstName = "Petko",
                        LastName  = "Bagera"
                    };

                    var barmanPassword = "******";
                    var barman         = new RestaurantUser()
                    {
                        UserName  = "******",
                        Email     = "*****@*****.**",
                        FirstName = "Pencho",
                        LastName  = "Slaveykov"
                    };

                    var chefPassword = "******";
                    var chef         = new RestaurantUser()
                    {
                        UserName  = "******",
                        Email     = "*****@*****.**",
                        FirstName = "Chef",
                        LastName  = "Manchev"
                    };

                    await userManager.CreateAsync(admin, adminPasswrod);
                    await userManager.AddToRoleAsync(admin, AdminRole);

                    await userManager.CreateAsync(waiter, waiterPassword);
                    await userManager.AddToRoleAsync(waiter, WaiterRole);

                    await userManager.CreateAsync(waiter2, waiterPassword);
                    await userManager.AddToRoleAsync(waiter2, WaiterRole);

                    await userManager.CreateAsync(barman, barmanPassword);
                    await userManager.AddToRoleAsync(barman, BarmanRole);

                    await userManager.CreateAsync(chef, chefPassword);
                    await userManager.AddToRoleAsync(chef, ChefRole);
                }).Wait();

                db.SaveChanges();
            }

            Console.WriteLine("Admin and default roles successfully seeded into database!");
        }