Пример #1
0
        public async Task <ActionResult <IEnumerable <Person> > > GetPeople(string searchString)
        {
            //MetaUser user = await _userManager.GetUserAsync(User);
            MetaUser user = await _userManager.FindByIdAsync(searchString);

            return(await _context.People
                   .Include(p => p.Addresses)
                   .Include(p => p.Phones)
                   .Where(p => p.OwnerId == searchString).ToListAsync());
        }
Пример #2
0
        static M()
        {
            // Interfaces
            Object                          = MetaObject.Instance;
            Cachable                        = MetaCachable.Instance;
            Deletable                       = MetaDeletable.Instance;
            Enumeration                     = MetaEnumeration.Instance;
            UniquelyIdentifiable            = MetaUniquelyIdentifiable.Instance;
            Version                         = MetaVersion.Instance;
            Versioned                       = MetaVersioned.Instance;
            Printable                       = MetaPrintable.Instance;
            Localised                       = MetaLocalised.Instance;
            AccessControlledObject          = MetaAccessControlledObject.Instance;
            DelegatedAccessControlledObject = MetaDelegatedAccessControlledObject.Instance;
            SecurityTokenOwner              = MetaSecurityTokenOwner.Instance;
            ObjectState                     = MetaObjectState.Instance;
            Task                = MetaTask.Instance;
            Transitional        = MetaTransitional.Instance;
            TransitionalVersion = MetaTransitionalVersion.Instance;
            User                = MetaUser.Instance;
            WorkItem            = MetaWorkItem.Instance;

            // Classes
            Employment       = MetaEmployment.Instance;
            Organisation     = MetaOrganisation.Instance;
            Person           = MetaPerson.Instance;
            Settings         = MetaSettings.Instance;
            Singleton        = MetaSingleton.Instance;
            Counter          = MetaCounter.Instance;
            Media            = MetaMedia.Instance;
            MediaContent     = MetaMediaContent.Instance;
            PrintDocument    = MetaPrintDocument.Instance;
            Template         = MetaTemplate.Instance;
            TemplateType     = MetaTemplateType.Instance;
            PreparedExtent   = MetaPreparedExtent.Instance;
            PreparedFetch    = MetaPreparedFetch.Instance;
            Country          = MetaCountry.Instance;
            Currency         = MetaCurrency.Instance;
            Language         = MetaLanguage.Instance;
            Locale           = MetaLocale.Instance;
            LocalisedText    = MetaLocalisedText.Instance;
            AccessControl    = MetaAccessControl.Instance;
            Login            = MetaLogin.Instance;
            Permission       = MetaPermission.Instance;
            Role             = MetaRole.Instance;
            SecurityToken    = MetaSecurityToken.Instance;
            AutomatedAgent   = MetaAutomatedAgent.Instance;
            EmailMessage     = MetaEmailMessage.Instance;
            Notification     = MetaNotification.Instance;
            NotificationList = MetaNotificationList.Instance;
            TaskAssignment   = MetaTaskAssignment.Instance;
            TaskList         = MetaTaskList.Instance;
            UserGroup        = MetaUserGroup.Instance;
        }
Пример #3
0
        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            MetaUser user = await _userManager.GetUserAsync(context.Subject);

            List <Claim> claims = new List <Claim>
            {
                new Claim("FirstName", user.FirstName),
                new Claim("LastName", user.LastName),
            };

            context.IssuedClaims.AddRange(claims);
        }
Пример #4
0
        public async Task <IActionResult> PutPerson(
            int slug,
            [FromForm] bool addressCheck,
            [FromForm] bool phoneCheck,
            [FromForm] string substring,
            [FromForm] Person person,
            [FromForm] Address address,
            [FromForm] Phone phone)
        {
            if (person == null)
            {
                throw new ArgumentNullException(nameof(person));
            }

            MetaUser user = await _userManager.FindByIdAsync(substring);

            if (user is null || slug != person.Id)
            {
                return(BadRequest());
            }
            if (addressCheck)
            {
                _context.Entry(address).State = EntityState.Modified;
                person.Addresses.Add(address);
            }
            if (phoneCheck)
            {
                _context.Entry(phone).State = EntityState.Modified;
                person.Phones.Add(phone);
            }

            _context.Entry(person).State = EntityState.Modified;
            person.OwnerId = substring;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PersonExists(slug))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Пример #5
0
        private async Task LoadAsync(MetaUser user)
        {
            var email = await _userManager.GetEmailAsync(user);

            Email = email;

            Input = new InputModel
            {
                NewEmail = email,
            };

            IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user);
        }
Пример #6
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                MetaUser user = new MetaUser {
                    UserName  = Input.Email,
                    Email     = Input.Email,
                    FirstName = Input.FirstName,
                    LastName  = Input.LastName
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation($"User ({user.FirstName} {user.LastName}) created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, 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>.");

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email }));
                    }
                    else
                    {
                        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());
        }
Пример #7
0
        private async Task LoadAsync(MetaUser user)
        {
            var userName = await _userManager.GetUserNameAsync(user);

            var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

            Username = userName;

            Input = new InputModel
            {
                PhoneNumber = phoneNumber
            };

            FullName = $"{user.FirstName} {user.LastName}";
        }
Пример #8
0
        protected override void Initialize(RequestContext context)
        {
            string clientToken = context.HttpContext.Request.GetClientToken();
            var    provider    = new Provider(DbConvention.GetTenant());
            var    token       = provider.GetToken(clientToken);
            string tenant      = DbConvention.GetTenant();

            if (token != null)
            {
                bool isValid = AccessTokens.IsValid(token.ClientToken, context.HttpContext.GetClientIpAddress(),
                                                    context.HttpContext.GetUserAgent());

                if (isValid)
                {
                    AppUsers.SetCurrentLogin(tenant, token.LoginId);
                    var loginView = AppUsers.GetCurrent(tenant, token.LoginId);

                    this.MetaUser = new MetaUser
                    {
                        Tenant      = tenant,
                        ClientToken = token.ClientToken,
                        LoginId     = token.LoginId,
                        UserId      = token.UserId,
                        OfficeId    = token.OfficeId
                    };

                    var identity = new ClaimsIdentity(token.Claims, DefaultAuthenticationTypes.ApplicationCookie,
                                                      ClaimTypes.NameIdentifier, ClaimTypes.Role);
                    identity.AddClaim(new Claim(ClaimTypes.NameIdentifier,
                                                token.LoginId.ToString(CultureInfo.InvariantCulture)));

                    if (loginView.RoleName != null)
                    {
                        identity.AddClaim(new Claim(ClaimTypes.Role, loginView.RoleName));
                    }

                    if (loginView.Email != null)
                    {
                        identity.AddClaim(new Claim(ClaimTypes.Email, loginView.Email));
                    }

                    context.HttpContext.User = new ClaimsPrincipal(identity);
                }
            }

            base.Initialize(context);
        }
Пример #9
0
        protected override void Initialize(HttpControllerContext context)
        {
            string database = DbConvention.GetTenant();

            string clientToken = context.Request.GetBearerToken();
            var    provider    = new Provider(database);
            var    token       = provider.GetToken(clientToken);


            if (token != null)
            {
                AppUsers.SetCurrentLogin(database, token.LoginId);
                var loginView = AppUsers.GetCurrent(database, token.LoginId);

                this.MetaUser = new MetaUser
                {
                    Tenant      = database,
                    ClientToken = token.ClientToken,
                    LoginId     = token.LoginId,
                    UserId      = loginView.UserId.To <int>(),
                    OfficeId    = loginView.OfficeId.To <int>()
                };

                var identity = new ClaimsIdentity(token.Claims);

                identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, token.LoginId.ToString(CultureInfo.InvariantCulture)));

                if (loginView.RoleName != null)
                {
                    identity.AddClaim(new Claim(ClaimTypes.Role, loginView.RoleName));
                }

                if (loginView.Email != null)
                {
                    identity.AddClaim(new Claim(ClaimTypes.Email, loginView.Email));
                }

                context.RequestContext.Principal = new ClaimsPrincipal(identity);
            }

            base.Initialize(context);
        }
Пример #10
0
        public async Task <ActionResult <Person> > PostPerson(
            [FromForm] string substring,
            [FromForm] bool addressCheck,
            [FromForm] bool phoneCheck,
            [FromForm] Person peep,
            [FromForm] Address address,
            [FromForm] Phone phone)
        {
            MetaUser user = await _userManager.FindByIdAsync(substring);

            if (user is null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            Person person = peep;

            // Check for an address
            if (addressCheck)
            {
                Address addy = address;
                person.Addresses.Add(addy);
            }

            // Check for a phone
            if (phoneCheck)
            {
                Phone caller = phone;
                person.Phones.Add(caller);
            }

            person.OwnerId = substring;
            _context.People.Add(person);
            user.UserContacts.Add(person);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetPerson", new { id = person.Id }, person));
        }
Пример #11
0
        public async Task IsActiveAsync(IsActiveContext context)
        {
            MetaUser user = await _userManager.GetUserAsync(context.Subject);

            context.IsActive = (user != null);
        }
Пример #12
0
        static bool IsMetaUserStale(MetaUser meta)
        {
            //clear warnings older than an hour
            meta.Warnings.RemoveAll(new Predicate<Warning>(HasWarningExpired));

            //tag if elevated or warnings are still out
            if (meta.Elevation || meta.JTVModerator || meta.Warnings.Count > 0 || (DateTime.UtcNow - meta.DeopTime).TotalHours < 1.0)
            {
                return false;
            }

            //inform referencing users
            List<User> copy = new List<User>(meta.References);
            foreach (User user in copy)
            {
                user.Meta = null;
            }

            //list should be empty
            Debug.Assert(meta.References.Count == 0);

            //item now stale
            return true;
        }