Пример #1
0
        public void RemoveUserRolesTest()
        {
            GXUser user = new GXUser();

            user.Id       = "642c8f77-aeeb-4e86-86db-1a8b1b2fc982";
            user.UserName = "******";
            List <string> roles = new List <string>();

            roles.Add("Admin");
            roles.Add("User");
            roles.Add("DeviceManager");
            roles.Add("SystemErrorManager");
            GXSelectArgs sel = GXSelectArgs.Select <GXRole>(q => GXSql.One);

            sel.Where.And <GXUserRole>(q => q.UserId == user.Id);
            sel.Where.And <GXRole>(q => !roles.Contains(q.Name));
            GXDeleteArgs d = GXDeleteArgs.Delete <GXUserRole>(q => q.UserId == user.Id);

            d.Where.And <GXRole>(q => GXSql.Exists <GXUserRole, GXRole>(q => q.RoleId, q => q.Id, sel));

            /*
             * GXSelectArgs sel = GXSelectArgs.Select<GXUserRole>(q => q.UserId, q => q.UserId == "642c8f77-aeeb-4e86-86db-1a8b1b2fc982");
             * sel.Joins.AddInnerJoin<GXUserRole, GXRole>(a => a.RoleId, b => b.Id);
             * sel.Where.And<GXRole>(q => !roles.Contains(q.Name));
             * GXDeleteArgs d = GXDeleteArgs.Delete<GXUserRole>(q => GXSql.Exists(sel));
             */
            Assert.AreEqual("", d.ToString());
        }
Пример #2
0
        public void AddUserRolesTest()
        {
            GXUser user = new GXUser();

            user.Id       = "642c8f77-aeeb-4e86-86db-1a8b1b2fc982";
            user.UserName = "******";
            List <string> roles = new List <string>();

            roles.Add("Admin");
            roles.Add("User");
            roles.Add("DeviceManager");
            roles.Add("SystemErrorManager");
            GXSelectArgs sel  = GXSelectArgs.Select <GXRole>(q => q.Id);
            GXSelectArgs sel2 = GXSelectArgs.Select <GXUserRole>(q => q.UserId, q => q.UserId == "642c8f77-aeeb-4e86-86db-1a8b1b2fc982");

            sel.Where.And <GXRole>(q => !GXSql.Exists <GXRole, GXUserRole>(q => q.Id, q => q.RoleId, sel2));
            sel.Where.And <GXRole>(q => roles.Contains(q.Name));
            GXUserRole ur = new GXUserRole();

            ur.UserId = user.Id;
            GXInsertArgs i = GXInsertArgs.Insert(ur);

            i.Add <GXUserRole>(sel, q => q.RoleId);
            Assert.AreEqual("", i.ToString());
        }
Пример #3
0
        public void IPTest()
        {
            GXUser user = new GXUser();

            user.Id = "Gurux";
            //GXSelectArgs args = GXSelectArgs.Select<GXIpAddress>(s => s.Id, where => where.User == user && where.IPAddress == 0);
            GXSelectArgs args = GXSelectArgs.Select <GXIpAddress>(s => s.Id, where => where.User == user);

            Assert.AreEqual("Mikko", args.ToString());
        }
Пример #4
0
        private bool isGroupMember(GXUser user, Group group)
        {
            var members = _context.GroupMembers.Where(x => x.group == group);

            if (group.owner == user || members.Any(x => x.member == user))
            {
                return(true);
            }
            return(false);
        }
Пример #5
0
        public void UpdateUserTest()
        {
            GXUser user = new GXUser();

            user.Id       = "1";
            user.UserName = "******";
            GXUpdateArgs arg2 = GXUpdateArgs.Update(user);

            arg2.Exclude <GXUser>(q => new { q.PasswordHash, q.SecurityStamp, q.CreationTime });
            Assert.AreEqual("UPDATE [GXUser] SET [UserName] = 'Gurux', [NormalizedUserName] = NULL, [Email] = NULL, [NormalizedEmail] = NULL, [EmailConfirmed] = 0, [ConcurrencyStamp] = NULL, [PhoneNumber] = NULL, [PhoneNumberConfirmed] = 0, [TwoFactorEnabled] = 0, [LockoutEnd] = '00010101 00:00:00 +00:00', [LockoutEnabled] = 0, [AccessFailedCount] = 0, [Updated] = '00010101 00:00:00', [Detected] = '00010101 00:00:00', [Removed] = '00010101 00:00:00', [DateOfBirth] = NULL WHERE [ID] = '1'", arg2.ToString());
        }
Пример #6
0
        public void RemoveUsersTest()
        {
            RemoveUser req = new RemoveUser();

            req.Ids = new string[] { Guid.Empty.ToString(), Guid.Empty.ToString() };
            //Set removed time for all the removed users.
            GXUser u = new GXUser()
            {
                Removed = DateTime.Now
            };
            GXUpdateArgs update = GXUpdateArgs.Update(u, q => q.Removed);

            update.Where.And <GXUser>(q => req.Ids.Contains(q.Id));
            Assert.AreEqual("", update.ToString());
        }
        public async Task <IActionResult> Register([FromBody] RegisterViewModel vm)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var user = new GXUser()
                {
                    UserName  = vm.email,
                    Email     = vm.email,
                    firstName = vm.firstName,
                    lastName  = vm.lastName,
                    gender    = vm.gender
                };

                var result = await _userManager.CreateAsync(user, vm.password);

                if (!result.Succeeded)
                {
                    return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState)));
                }
                ;

                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                //var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);

                var ub = new UriBuilder(url);
                ub.Path  = "confirm-email";
                ub.Query = $"userId={user.Id}&code={HttpUtility.UrlEncode(code)}";

                var callbackUrl = ub.ToString();

                await _emailSender.SendEmailConfirmationAsync(user.Email, callbackUrl);


                return(Ok(result));
            }
            catch (AppException ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Пример #8
0
        public void MultipleTablesTest()
        {
            GXUser user = new GXUser()
            {
                Id = "Gurux"
            };
            GXUserGroup userGroup = new GXUserGroup();

            userGroup.Users.Add(user);
            GXSelectArgs arg = GXSelectArgs.Select <GXUserGroup>(s => s.Id, where => where.Removed == null);

            arg.Where.FilterBy(userGroup, false);
            arg.Joins.AddInnerJoin <GXUserGroup, GXUserGroupUser>(j => j.Id, j => j.UserGroupId);
            arg.Joins.AddInnerJoin <GXUserGroupUser, GXUser>(j => j.UserId, j => j.Id);
            string[] userIds = new string[] { "Gurux" };
            arg.Where.And <GXUser>(where => where.Removed == null && userIds.Contains(where.Id));
            Assert.AreEqual("Mikko", arg.ToString());
        }
Пример #9
0
        public void ExcludeTest()
        {
            GXUser user = new GXUser()
            {
                Id = "Default"
            };
            GXUserGroup item = new GXUserGroup()
            {
                Name = "Default"
            };

            item.Users.Add(user);
            GXInsertArgs insert = GXInsertArgs.Insert(item);

            insert.Exclude <GXUserGroup>(e => e.CreationTime);
            insert.Exclude <GXUserGroup>(e => e.Users);
            Assert.AreEqual("Mikko", insert.ToString());
        }
Пример #10
0
        public async Task <IActionResult> GoogleLogin([FromBody] GoogleLoginViewModel vm)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var user = await _userManager.FindByEmailAsync(vm.email);

            string password = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8);

            if (user == null)
            {
                var u = new GXUser()
                {
                    Email      = vm.email,
                    UserName   = vm.email,
                    googleId   = vm.googleId,
                    photoUrl   = vm.photoUrl,
                    firstName  = vm.name,
                    gender     = "",
                    dateJoined = DateTime.Now
                };

                var result = await _userManager.CreateAsync(u, password);

                if (!result.Succeeded)
                {
                    return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState)));
                }

                user = await _userManager.FindByEmailAsync(vm.email);
            }
            else
            {
                user.googleId = vm.googleId;
                user.photoUrl = vm.photoUrl;
                _context.Users.Update(user);
                await _context.SaveChangesAsync();
            }

            var identity = await Task.FromResult(_jwtFactory.GenerateClaimsIdentity(user.UserName, user.Id));

            var jwt = await Tokens.GenerateJwt(identity, _jwtFactory, user.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented });


            return(Ok(new
            {
                Id = user.Id,
                userName = user.UserName,
                firstName = user.firstName,
                lastName = user.lastName,
                email = user.Email,
                facebookId = user.facebookId,
                gender = user.gender,
                twitterId = user.twitterId,
                googleId = user.googleId,
                birthDate = user.birthDate,
                photoUrl = !string.IsNullOrEmpty(user.photoUrl) ? user.photoUrl : "/assets/images/profile-pic.png",
                token = jwt
            }));
        }
Пример #11
0
        public static string buildGroupInviteSubject(Group group, GroupInvite invite, GXUser user)
        {
            if (group == null)
            {
                return("");
            }
            if (invite == null)
            {
                return("");
            }
            if (user == null)
            {
                return("");
            }

            var sb = new StringBuilder();

            if (!string.IsNullOrEmpty(user.lastName) & !string.IsNullOrEmpty(user.firstName))
            {
                sb.AppendFormat("{0} {1}", user.firstName, user.lastName);
            }
            else
            {
                sb.AppendFormat("{0}", user.Email);
            }

            sb.AppendFormat(" has invited you to to ");
            switch (user.gender)
            {
            case "":
                sb.Append("their");
                break;

            case "m":
                sb.Append("his");
                break;

            case "f":
                sb.Append("her");
                break;

            default:
                sb.Append("their");
                break;
            }
            sb.AppendFormat(" group {0} on Gift Exchange", group.name);

            return(sb.ToString());
        }
Пример #12
0
        private async Task <TwitterUserModel> getAccessToken(string authToken, string authVerifier)
        {
            GXUser           user   = null;
            TwitterUserModel twUser = null;
            string           jwt    = "";

            string nonce     = oAuthUtil.GetNonce();
            string timeStamp = oAuthUtil.GetTimeStamp();

            string sigBaseStringParams = "oauth_consumer_key=" + "5R7Y1dJMc26yEdzFEbLWCZWKg";

            sigBaseStringParams += "&" + "oauth_nonce=" + nonce;
            sigBaseStringParams += "&" + "oauth_signature_method=" + "HMAC-SHA1";
            sigBaseStringParams += "&" + "oauth_timestamp=" + timeStamp;
            sigBaseStringParams += "&" + "oauth_token=" + authToken;
            sigBaseStringParams += "&" + "oauth_verifier=" + authVerifier;
            sigBaseStringParams += "&" + "oauth_version=1.0";
            string sigBaseString = "POST&";

            sigBaseString += Uri.EscapeDataString("https://api.twitter.com/oauth/access_token") + "&" + Uri.EscapeDataString(sigBaseStringParams);

            byte[]   content = Encoding.UTF8.GetBytes(sigBaseString);
            HMACSHA1 hmac    = new HMACSHA1(Encoding.ASCII.GetBytes("Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs" + "&"));

            hmac.ComputeHash(content);

            string signature = Convert.ToBase64String(hmac.Hash);

            signature = signature.Replace("-", "");


            //string signature = oAuthUtil.GetSignature(sigBaseString, "Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs");

            var responseText = await oAuthUtil.PostData("https://api.twitter.com/oauth/access_token", sigBaseStringParams + "&oauth_signature=" + Uri.EscapeDataString(signature));

            if (!string.IsNullOrEmpty(responseText))
            {
                string oauth_token          = null;
                string oauth_token_secret   = null;
                string oauth_authorize_url  = null;
                string oauth_oauth_verifier = null;
                string user_id     = null;
                string screen_name = null;

                string[] keyValPairs = responseText.Split('&');

                for (int i = 0; i < keyValPairs.Length; i++)
                {
                    String[] splits = keyValPairs[i].Split('=');
                    switch (splits[0])
                    {
                    case "oauth_token":
                        oauth_token = splits[1];
                        break;

                    case "oauth_token_secret":
                        oauth_token_secret = splits[1];
                        break;

                    case "xoauth_request_auth_url":
                        oauth_authorize_url = splits[1];
                        break;

                    case "oauth_verifier":
                        oauth_oauth_verifier = splits[1];
                        break;

                    case "user_id":
                        user_id = splits[1];
                        break;

                    case "screen_name":
                        screen_name = splits[1];
                        break;
                    }
                }

                //requestToken.Text = oauth_token;
                //requestTokenSecretKey.Text = oauth_token_secret;
                //oAuthAuthorizeLink.Content = Uri.UnescapeDataString(_twitterAuthorizeUrl + "?oauth_token=" + oauth_token);

                var oa = new OAuthResponse();

                if (oauth_token != null && oauth_token_secret != null)
                {
                    //var credentialsText = Verify_Credentials("5R7Y1dJMc26yEdzFEbLWCZWKg", "Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs", oauth_token, oauth_token_secret);
                    var credentialsText = GetTwitterUser("5R7Y1dJMc26yEdzFEbLWCZWKg",
                                                         "Ly2vdzPf23DfYlFPruxloVT4ix93Y9hmXepngPbQWRUHMPeZZs", oauth_token, oauth_token_secret);
                    if (credentialsText.IndexOf("Error:") < 0 && !string.IsNullOrEmpty(credentialsText))
                    {
                        try
                        {
                            twUser = JsonConvert.DeserializeObject <TwitterUserModel>(credentialsText);
                        }catch (Exception ex)
                        {
                            return(null);
                        }
                    }
                }
            }

            return(twUser);
        }
Пример #13
0
        public async Task <IActionResult> UpdateProfile([FromBody] GXUser u)
        {
            var user = await getUser();

            var msg = "";

            bool hasChanges   = false;
            bool emailChanged = false;

            if (user.firstName != u.firstName)
            {
                user.firstName = u.firstName;
                hasChanges     = true;
            }
            if (user.lastName != u.lastName)
            {
                user.lastName = u.lastName;
                hasChanges    = true;
            }
            if (user.birthDate != u.birthDate)
            {
                user.birthDate = u.birthDate;
                hasChanges     = true;
            }
            if (user.gender != u.gender)
            {
                user.gender = u.gender;
                hasChanges  = true;
            }
            if (user.photoUrl != u.photoUrl)
            {
                user.photoUrl = u.photoUrl;
                hasChanges    = true;
            }

            if (user.Email != u.Email && (string.IsNullOrEmpty(user.googleId) && string.IsNullOrEmpty(user.facebookId) && string.IsNullOrEmpty(user.twitterId)))
            {
                user.EmailConfirmed = false;
                user.Email          = u.Email;
                user.UserName       = u.Email;

                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                //var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);

                var ub = new UriBuilder(url);
                ub.Path  = "confirm-email";
                ub.Query = $"userId={user.Id}&code={HttpUtility.UrlEncode(code)}";

                var callbackUrl = ub.ToString();

                await _emailSender.SendEmailConfirmationAsync(user.Email, callbackUrl);

                hasChanges   = true;
                emailChanged = true;
            }

            if (hasChanges)
            {
                _context.Users.Update(user);
                await _context.SaveChangesAsync();

                if (!emailChanged)
                {
                    msg = "Profile updated!";
                }
                else
                {
                    msg = "Your email has been updated. Please check your inbox to confirm your new email address.";
                }
            }

            return(Ok(new
            {
                user,
                msg,
                emailChanged
            }));
        }
Пример #14
0
        public async Task <IActionResult> GetTwitterAccess(string accessToken, string authVerifier)
        {
            var s = await getAccessToken(accessToken, authVerifier);

            if (s == null)
            {
                return(BadRequest("Twitter login failed"));
            }

            var user = await _userManager.FindByEmailAsync(s.email);

            string password = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8);

            if (user == null)
            {
                var u = new GXUser()
                {
                    Email      = s.email,
                    UserName   = s.email,
                    googleId   = "",
                    photoUrl   = s.profile_image_url_https,
                    firstName  = s.name,
                    lastName   = "",
                    gender     = "",
                    dateJoined = DateTime.Now
                };

                var result = await _userManager.CreateAsync(u, password);

                if (!result.Succeeded)
                {
                    return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState)));
                }

                user = await _userManager.FindByEmailAsync(s.email);
            }
            else
            {
                user.twitterId = s.id_str;
                user.photoUrl  = s.profile_image_url_https;
                _context.Users.Update(user);
                await _context.SaveChangesAsync();
            }

            var identity = await Task.FromResult(_jwtFactory.GenerateClaimsIdentity(user.UserName, user.Id));

            var jwt = await Tokens.GenerateJwt(identity, _jwtFactory, user.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented });


            return(Ok(new
            {
                Id = user.Id,
                userName = user.UserName,
                firstName = user.firstName,
                lastName = user.lastName,
                email = user.Email,
                facebookId = user.facebookId,
                photoUrl = !string.IsNullOrEmpty(user.photoUrl) ? user.photoUrl : "/assets/images/profile-pic.png",
                token = jwt
            }));
        }
Пример #15
0
        public async Task <IActionResult> FacebookLogin([FromBody] FacebookViewModel vm)
        {
            var appAccessTokenResponse = await Client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={"189190551632736"}&client_secret={"3441dee2b662651ee71377f1677756e1"}&grant_type=client_credentials");

            var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse);
            // 2. validate the user access token
            var userAccessTokenValidationResponse = await Client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={vm.AccessToken}&access_token={appAccessToken.AccessToken}");

            var userAccessTokenValidation = JsonConvert.DeserializeObject <FacebookUserAccessTokenValidation>(userAccessTokenValidationResponse);

            if (!userAccessTokenValidation.Data.IsValid)
            {
                return(BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid facebook token.", ModelState)));
            }

            // 3. we've got a valid token so we can request user data from fb
            var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={vm.AccessToken}");

            var userInfo = JsonConvert.DeserializeObject <FacebookUserData>(userInfoResponse);

            // 4. ready to create the local user account (if necessary) and jwt
            var user = await _userManager.FindByEmailAsync(userInfo.Email);

            if (user == null)
            {
                var appUser = new GXUser
                {
                    firstName  = userInfo.FirstName,
                    lastName   = userInfo.LastName,
                    facebookId = userInfo.Id.ToString(),
                    Email      = userInfo.Email,
                    UserName   = userInfo.Email,
                    photoUrl   = userInfo.Picture.Data.Url
                };

                var result = await _userManager.CreateAsync(appUser, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8));

                if (!result.Succeeded)
                {
                    return(new BadRequestObjectResult(Errors.AddErrorsToModelState(result, ModelState)));
                }
            }
            else
            {
                user.facebookId = userInfo.Id.ToString();
                user.photoUrl   = userInfo.Picture.Data.Url;
                _context.Users.Update(user);
                await _context.SaveChangesAsync();
            }

            // generate the jwt for the local user...
            var localUser = await _userManager.FindByNameAsync(userInfo.Email);

            if (localUser == null)
            {
                return(BadRequest(Errors.AddErrorToModelState("login_failure", "Failed to create local user account.", ModelState)));
            }
            var identity = await Task.FromResult(_jwtFactory.GenerateClaimsIdentity(user.UserName, user.Id));

            var jwt = await Tokens.GenerateJwt(identity, _jwtFactory, user.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented });

            return(Ok(new
            {
                Id = user.Id,
                userName = user.UserName,
                firstName = user.firstName,
                lastName = user.lastName,
                email = user.Email,
                facebookId = user.facebookId,
                gender = user.gender,
                twitterId = user.twitterId,
                googleId = user.googleId,
                birthDate = user.birthDate,
                photoUrl = !string.IsNullOrEmpty(user.photoUrl) ? user.photoUrl : "/assets/images/profile-pic.png",
                token = jwt
            }));
        }
Пример #16
0
 public IEnumerable <Group> getGroupsByOwner(GXUser user)
 {
     return(_db.Groups.OrderBy(x => x.owner == user));
 }
Пример #17
0
        public static string buildGroupInviteMessage(Group group, GroupInvite invite, GXUser user, string url)
        {
            if (group == null)
            {
                return("");
            }
            if (invite == null)
            {
                return("");
            }
            if (user == null)
            {
                return("");
            }

            var sb = new StringBuilder();

            sb.AppendFormat("<p>{0}</p>", buildGroupInviteSubject(group, invite, user));

            sb.Append("<hr />");

            sb.AppendFormat("<div>{0}</div>", invite.message);

            var acceptUrl = url + "/acceptinvite/" + invite.guid.ToString();

            sb.AppendFormat("<p><a href=\"{0}\">{1}</a></p>", acceptUrl, "Click here to join this group");

            return(sb.ToString());
        }