public async Task <IActionResult> Edit(Guid id, [Bind("CmsuserId,CreateDateTime,ModifyDateTime,Name,Phone,CompanyId,CountryId,CmsuserTypeId,UserId,TimeZoneLocationId,IsDeleted,Mobile,IsAbleToApproveQuotes,Pospin,PospinexpiryDate,IsPosUser,IsLoggedInToPos,LastKtixPosTerminalId")] Cmsuser cmsuser)
        {
            if (id != cmsuser.CmsuserId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(cmsuser);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CmsuserExists(cmsuser.CmsuserId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CmsuserTypeId"] = new SelectList(_context.Cmsusertype, "CmsuserTypeId", "Name", cmsuser.CmsuserTypeId);
            ViewData["CompanyId"]     = new SelectList(_context.Company, "CompanyId", "Address1", cmsuser.CompanyId);
            ViewData["CountryId"]     = new SelectList(_context.Country, "CountryId", "Name", cmsuser.CountryId);
            ViewData["UserId"]        = new SelectList(_context.AspnetUsers, "UserId", "LoweredUserName", cmsuser.UserId);
            return(View(cmsuser));
        }
        // [Authorize]
        public async Task <IActionResult> Logout(Guid CMSuserId)
        {
            var query = from p in _context.Cmsuser
                        where p.CmsuserId == CMSuserId
                        select p;

            var result = await query.ToListAsync();

            if (result == null || result.Count() == 0)
            {
                //this is a super user of Kinesis
                var NullUser = new LoginDTO()
                {
                    LoginType = "SUPER",
                    Username  = "******",
                    Status    = true
                };

                List <LoginDTO> list = new List <LoginDTO>();
                list.Add(NullUser);

                if (list != null)
                {
                    return(Ok(list));
                }
                else
                {
                    return(NotFound());
                }
            }
            else
            {
                Cmsuser thisUser = result.FirstOrDefault();
                var     CMSuser  = query.Select(x => new LoginDTO()
                {
                    LoginType = "CMSUser",
                    Username  = "******",
                    Status    = true
                }).ToList();

                //update table
                var todo = _context.Cmsuser.Find(thisUser.CmsuserId);
                todo.IsLoggedInToPos = false;
                _context.Cmsuser.Update(todo);
                _context.SaveChanges();

                if (CMSuser != null)
                {
                    return(Ok(CMSuser));
                }
                else
                {
                    return(NotFound());
                }
            }
        }
        private ClaimsIdentity GenerateClaims(Cmsuser user)
        {
            var userId = user == null ? string.Empty : user.Name;

            IList <Claim> claims = new List <Claim>
            {
                new Claim(ClaimTypes.Name, userId),
            };

            return(new ClaimsIdentity(claims, "Bearer"));
        }
        private string GenerateJSONWebToken(Cmsuser user = null)
        {
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("Jwt:Key").Value));
            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
            var identity    = GenerateClaims(user);
            var now         = DateTime.UtcNow;

            var token = new JwtSecurityToken(claims: identity.Claims,
                                             notBefore: now,
                                             expires: now.Add(TimeSpan.FromDays(+1)),
                                             signingCredentials: credentials);

            return(new JwtSecurityTokenHandler().WriteToken(token));
        }
        public async Task <IActionResult> Create([Bind("CmsuserId,CreateDateTime,ModifyDateTime,Name,Phone,CompanyId,CountryId,CmsuserTypeId,UserId,TimeZoneLocationId,IsDeleted,Mobile,IsAbleToApproveQuotes,Pospin,PospinexpiryDate,IsPosUser,IsLoggedInToPos,LastKtixPosTerminalId")] Cmsuser cmsuser)
        {
            if (ModelState.IsValid)
            {
                cmsuser.CmsuserId = Guid.NewGuid();
                _context.Add(cmsuser);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CmsuserTypeId"] = new SelectList(_context.Cmsusertype, "CmsuserTypeId", "Name", cmsuser.CmsuserTypeId);
            ViewData["CompanyId"]     = new SelectList(_context.Company, "CompanyId", "Address1", cmsuser.CompanyId);
            ViewData["CountryId"]     = new SelectList(_context.Country, "CountryId", "Name", cmsuser.CountryId);
            ViewData["UserId"]        = new SelectList(_context.AspnetUsers, "UserId", "LoweredUserName", cmsuser.UserId);
            return(View(cmsuser));
        }
        // GET: Logout
        public IEnumerable <LoginDTO> Logout(Guid CMSuserId)
        {
            var query = from p in _context.Cmsuser
                        where p.CmsuserId == CMSuserId
                        select p;

            if (query == null || query.Count() == 0)
            {
                //this is a super user of Kinesis
                var NullUser = new LoginDTO()
                {
                    loginType = "SUPER",
                    username  = "******",
                    status    = true
                };

                List <LoginDTO> list = new List <LoginDTO>();
                list.Add(NullUser);

                return(list);
            }
            else
            {
                Cmsuser thisUser = query.FirstOrDefault();
                var     CMSuser  = query.Select(x => new LoginDTO()
                {
                    loginType = "CMSUser",
                    username  = "******",
                    status    = true
                }).ToList();

                //update table
                var todo = _context.Cmsuser.Find(thisUser.CmsuserId);
                todo.IsLoggedInToPos = false;
                _context.Cmsuser.Update(todo);
                _context.SaveChanges();

                return(CMSuser);
            }
        }
        // GET: Login
        public IEnumerable <LoginDTO> Login(Guid companyId, Guid cinemaId, Int64 PIN, Guid KTixPosTerminalId)
        {
            if (PIN == 1234567812345678)
            {
                //this is a super user of Kinesis
                var SUPERuser = new LoginDTO()
                {
                    loginType = "MASTER",
                    username  = "******",
                    status    = true
                };

                List <LoginDTO> list = new List <LoginDTO>();
                list.Add(SUPERuser);

                return(list);
            }
            else
            {
                var query = from p in _context.Cmsuser
                            where p.CompanyId == companyId &&
                            p.IsPosUser == true &&
                            p.Pospin == PIN &&
                            p.PospinexpiryDate >= DateTime.Now &&
                            p.IsLoggedInToPos == false &&
                            _context.Cmsusercinemas.Any
                                (bc => bc.CmsuserId == p.CmsuserId &&
                                bc.CinemaId == cinemaId)
                            select p;
                if (query == null || query.Count() == 0)
                {
                    //this is a super user of Kinesis
                    var NullUser = new LoginDTO()
                    {
                        loginType = "CMSUser",
                        username  = "******",
                        status    = false,
                        cmsUserId = new Guid("00000000-0000-0000-0000-000000000000")
                    };

                    List <LoginDTO> list = new List <LoginDTO>();
                    list.Add(NullUser);

                    return(list);
                }
                else
                {
                    Cmsuser thisUser = query.FirstOrDefault();
                    var     CMSuser  = query.Select(x => new LoginDTO()
                    {
                        loginType = "CMSUser",
                        username  = x.Name,
                        status    = true,
                        cmsUserId = x.CmsuserId
                    }).ToList();

                    //update table
                    var todo = _context.Cmsuser.Find(thisUser.CmsuserId);
                    todo.IsLoggedInToPos       = true;
                    todo.LastKtixPosTerminalId = KTixPosTerminalId;
                    _context.Cmsuser.Update(todo);
                    _context.SaveChanges();



                    return(CMSuser);
                }
            }
        }
        // [Authorize]
        public async Task <IActionResult> Login(Guid companyId, Guid cinemaId, Int64 PIN, Guid KTixPosTerminalId)
        {
            if (PIN == 1234567812345678)
            {
                //this is a super user of Kinesis
                //get token
                var tokenString = GenerateJSONWebToken();

                var SUPERuser = new LoginDTO()
                {
                    LoginType = "MASTER",
                    Username  = "******",
                    Status    = true,
                    Key       = tokenString
                };

                List <LoginDTO> list = new List <LoginDTO>();
                list.Add(SUPERuser);

                if (list != null)
                {
                    return(Ok(list));
                }
                else
                {
                    return(NotFound("Super user Login Failed"));
                }
            }
            else
            {
                var query = from p in _context.Cmsuser
                            where p.CompanyId == companyId &&
                            p.IsPosUser == true &&
                            p.Pospin == PIN &&
                            p.PospinexpiryDate >= DateTime.Now &&
                            p.IsLoggedInToPos == false &&
                            _context.Cmsusercinemas.Any
                                (bc => bc.CmsuserId == p.CmsuserId &&
                                bc.CinemaId == cinemaId)
                            select p;
                var result = await query.ToListAsync();

                if (result == null || result.Count() == 0)
                {
                    //this is a cms user of Kinesis
                    var NullUser = new LoginDTO()
                    {
                        LoginType = "CMSUser",
                        Username  = "******",
                        Status    = false,
                        CmsUserId = new Guid("00000000-0000-0000-0000-000000000000")
                    };

                    List <LoginDTO> list = new List <LoginDTO>();
                    list.Add(NullUser);

                    if (list != null)
                    {
                        return(Ok(list));
                    }
                    else
                    {
                        return(NotFound());
                    }
                }
                else
                {
                    Cmsuser thisUser = query.FirstOrDefault();

                    var tokenString = GenerateJSONWebToken(thisUser);

                    var CMSuser = await query.Select(x => new LoginDTO()
                    {
                        LoginType = "CMSUser",
                        Username  = x.Name,
                        Status    = true,
                        CmsUserId = x.CmsuserId,
                        Key       = tokenString
                    }).ToListAsync();

                    //update table
                    var todo = _context.Cmsuser.Find(thisUser.CmsuserId);
                    todo.IsLoggedInToPos       = true;
                    todo.LastKtixPosTerminalId = KTixPosTerminalId;
                    _context.Cmsuser.Update(todo);
                    _context.SaveChanges();

                    if (CMSuser != null)
                    {
                        return(Ok(CMSuser));
                    }
                    else
                    {
                        return(NotFound());
                    }
                }
            }
        }