Ejemplo n.º 1
0
        public async Task UserReadAndWrite()
        {
            await LCUser.Login(TestPhone, TestPhone);

            account = new Account();
            LCUser currentUser = await LCUser.GetCurrent();

            account.ACL     = LCACL.CreateWithOwner(currentUser);
            account.Balance = 512;
            await account.Save();

            Assert.IsTrue(account.ACL.GetUserReadAccess(currentUser));
            Assert.IsTrue(account.ACL.GetUserWriteAccess(currentUser));

            LCQuery <LCObject> query  = new LCQuery <LCObject>("Account");
            LCObject           result = await query.Get(account.ObjectId);

            TestContext.WriteLine(result.ObjectId);
            Assert.NotNull(result.ObjectId);

            await LCUser.Logout();

            try {
                await query.Get(account.ObjectId);
            } catch (LCException e) {
                Assert.AreEqual(e.Code, 403);
            }
        }
        /// <summary>
        /// Bring up to login menu
        /// </summary>
        public async void ShowLoginMenu()
        {
            if (LCUtils.TryGetLocalSessionToken(out string sessionToken))
            {
                try {
                    LCUser user = await LCManager.Instance.Login(sessionToken);

                    string nickname = user.GetNickname();
                    if (string.IsNullOrEmpty(nickname))
                    {
                        ShowNameMenu();
                    }
                    else
                    {
                        ShowLCMainMenu();
                    }
                } catch (LCException e) {
                    Debug.LogError($"{e.Code} - {e.Message}");
                    ChangePage(loginPanel);
                }
            }
            else
            {
                ChangePage(loginPanel);
            }
        }
Ejemplo n.º 3
0
        public async Task UpdatePassword()
        {
            LCUser currentUser = await LCUser.Login("hello", "world");

            await currentUser.UpdatePassword("world", "newWorld");

            await currentUser.UpdatePassword("newWorld", "world");
        }
Ejemplo n.º 4
0
        public async Task LoginByEmail()
        {
            await LCUser.LoginByEmail("*****@*****.**", "world");

            LCUser current = await LCUser.GetCurrent();

            Assert.NotNull(current.ObjectId);
        }
Ejemplo n.º 5
0
 public void ClickUser(LCUser target)
 {
     if (target != null &&
         target.ObjectId != LCManager.Instance.User.ObjectId)
     {
         popup.Show(target);
     }
 }
Ejemplo n.º 6
0
        public async Task IsAuthenticated()
        {
            LCUser currentUser = await LCUser.Login("hello", "world");

            bool isAuthenticated = await currentUser.IsAuthenticated();

            TestContext.WriteLine(isAuthenticated);
            Assert.IsTrue(isAuthenticated);
        }
Ejemplo n.º 7
0
        async Task <LCUser> SignUp()
        {
            LCUser user = new LCUser {
                Username = Guid.NewGuid().ToString(),
                Password = "******"
            };

            return(await user.SignUp());
        }
Ejemplo n.º 8
0
 public void UpdateItemData(object data)
 {
     if (data is LCFriendshipRequest req)
     {
         request = req;
         LCUser user = request["user"] as LCUser;
         nameText.text = user.GetNickname();
         gameObject.SetActive(true);
     }
 }
Ejemplo n.º 9
0
        public async Task Query()
        {
            await LCUser.Login("game", "play");

            LCQuery <LCObject> query   = new LCQuery <LCObject>("Account");
            LCObject           account = await query.Get("5e144525dd3c13006a8f8de2");

            TestContext.WriteLine(account.ObjectId);
            Assert.NotNull(account.ObjectId);
        }
Ejemplo n.º 10
0
        public async Task Query()
        {
            await LCUser.Login(TestPhone, TestPhone);

            LCQuery <LCObject> query        = new LCQuery <LCObject>("Account");
            Account            queryAccount = (await query.Get(account.ObjectId)) as Account;

            TestContext.WriteLine(queryAccount.ObjectId);
            Assert.NotNull(queryAccount.ObjectId);
        }
Ejemplo n.º 11
0
        async Task <LCFriendshipRequest> GetRequest()
        {
            LCUser user = await LCUser.GetCurrent();

            LCQuery <LCFriendshipRequest> query = new LCQuery <LCFriendshipRequest>("_FriendshipRequest")
                                                  .WhereEqualTo("friend", user)
                                                  .WhereEqualTo("status", "pending");

            return(await query.First());
        }
Ejemplo n.º 12
0
        public void Delete(long id)
        {
            LCUser user = _context.LCUsers.Find(id);

            if (user != null)
            {
                _context.LCUsers.Remove(user);
                _context.SaveChanges();
            }
        }
Ejemplo n.º 13
0
 public void UpdateItemData(object data)
 {
     if (data is MessageEntity messageEntity)
     {
         gameObject.SetActive(true);
         user = messageEntity.User;
         LCIMTextMessage message = messageEntity.Message as LCIMTextMessage;
         chatText.text = $"{user.GetNickname()}:{message.Text}";
     }
 }
Ejemplo n.º 14
0
        public async Task Unfollow()
        {
            await LCUser.BecomeWithSessionToken(user2.SessionToken);

            await user2.Unfollow(user1.ObjectId);

            await LCUser.BecomeWithSessionToken(user3.SessionToken);

            await user3.Unfollow(user1.ObjectId);
        }
Ejemplo n.º 15
0
        async Task <ReadOnlyCollection <LCObject> > GetFriends()
        {
            LCUser user = await LCUser.GetCurrent();

            LCQuery <LCObject> query = new LCQuery <LCObject>("_Followee")
                                       .WhereEqualTo("user", user)
                                       .WhereEqualTo("friendStatus", true);

            return(await query.Find());
        }
Ejemplo n.º 16
0
    private async void AddMessage(LCIMMessage message)
    {
        LCUser user = await LCManager.Instance.GetUser(message.FromClientId);

        scrollRect.AddItemData(new MessageEntity {
            User    = user,
            Message = message
        });
        StartCoroutine(Resize());
    }
Ejemplo n.º 17
0
 public void UpdateItemData(object data)
 {
     if (data is LCObject obj)
     {
         friendship = obj;
         LCUser friend = friendship["followee"] as LCUser;
         nameText.text = friend.GetNickname();
         gameObject.SetActive(true);
     }
 }
Ejemplo n.º 18
0
        public void Update(LCUser userParam, string password = null)
        {
            LCUser user = _context.LCUsers.Find(userParam.UserID);

            if (user == null)
            {
                throw new AppException("User not found");
            }

            // update username if it has changed
            if (!string.IsNullOrWhiteSpace(userParam.Username) && userParam.Username != user.Username)
            {
                // throw error if the new username is already taken
                if (_context.LCUsers.Any(u => u.Discrim == userParam.Discrim))
                {
                    throw new AppException("Username already exists with that discriminator");
                }

                user.Username = userParam.Username;
            }

            // update user properties if provided
            if (!string.IsNullOrWhiteSpace(userParam.Email))
            {
                if (_context.LCUsers.Any(u => u.NormalizedEmail == userParam.Email.ToUpper()))
                {
                    throw new AppException("An account already exists with that email");
                }

                user.NormalizedEmail = userParam.Email.ToUpper();
            }

            if (userParam.Discrim != user.Discrim)
            {
                if (_context.LCUsers.Any(u => u.Discrim == userParam.Discrim))
                {
                    throw new AppException("That discriminator is already taken");
                }

                user.Discrim = userParam.Discrim;
            }

            // update password if provided
            if (!string.IsNullOrWhiteSpace(password))
            {
                byte[] passwordHash, passwordSalt;
                CreatePasswordHash(password, out passwordHash, out passwordSalt);

                user.PasswordHash = passwordHash;
                user.PasswordSalt = passwordSalt;
            }

            _context.LCUsers.Update(user);
            _context.SaveChanges();
        }
Ejemplo n.º 19
0
    public override async void Show()
    {
        base.Show();
        try {
            LCUser user = await LCUser.GetCurrent();

            nameText.text = user.GetNickname();
        } catch (LCException e) {
            LCUtils.LogException(e);
        }
    }
Ejemplo n.º 20
0
        public async Task RelateObject()
        {
            LCUser user = await LCUser.LoginByMobilePhoneNumber("15101006007", "112358");

            LCObject account = new LCObject("Account");

            account["user"] = user;
            await account.Save();

            Assert.AreEqual(user.ObjectId, "5e0d5c667d5774006a5c1177");
        }
Ejemplo n.º 21
0
 private static void OnLoginNotification(Dictionary <string, object> data)
 {
     if (TryGetLiveQuery(data, out LCLiveQuery liveQuery) &&
         data.TryGetValue("object", out object obj) &&
         obj is Dictionary <string, object> dict)
     {
         LCObjectData objectData = LCObjectData.Decode(dict);
         LCUser       user       = LCUser.GenerateUser(objectData);
         liveQuery.OnLogin?.Invoke(user);
     }
 }
Ejemplo n.º 22
0
        public async Task Login()
        {
            await LCUser.Login("hello", "world");

            LCUser current = await LCUser.GetCurrent();

            Assert.NotNull(current.ObjectId);
            Assert.IsFalse(current.EmailVerified);
            Assert.IsFalse(current.MobileVerified);
            Assert.AreEqual(current.Mobile, "15101006008");
        }
Ejemplo n.º 23
0
    public async void OnLoginAnoymouslyClicked()
    {
        try {
            LCUser user = await LCUser.LoginAnonymously();

            LCUtils.SaveUser(user);
            SendMessageUpwards("ShowNameMenu", SendMessageOptions.RequireReceiver);
        } catch (LCException e) {
            LCUtils.ShowToast(this, e);
        }
    }
Ejemplo n.º 24
0
 public void UpdateItemData(object data)
 {
     gameObject.SetActive(true);
     if (data is LCRanking ranking)
     {
         user             = ranking.User;
         rankingText.text = $"第 {ranking.Rank + 1} 名";
         nameText.text    = user.GetNickname();
         scoreText.text   = $"分数:{ranking.Value}";
     }
 }
Ejemplo n.º 25
0
        public async Task LoginBySessionToken()
        {
            await LCUser.Logout();

            string sessionToken = "luo2fpl4qij2050e7enqfz173";
            await LCUser.BecomeWithSessionToken(sessionToken);

            LCUser current = await LCUser.GetCurrent();

            Assert.NotNull(current.ObjectId);
        }
Ejemplo n.º 26
0
 public static bool IsMe(this LCUser user)
 {
     if (user == null)
     {
         return(false);
     }
     if (LCManager.Instance.User == null)
     {
         return(false);
     }
     return(LCManager.Instance.User.ObjectId == user.ObjectId);
 }
Ejemplo n.º 27
0
        public async Task AssociateAuthDataWithUnionId()
        {
            LCUser currentUser = await LCUser.Login("hello", "world");

            string uuid = Guid.NewGuid().ToString();
            Dictionary <string, object> authData = new Dictionary <string, object> {
                { "expires_in", 7200 },
                { "openid", uuid },
                { "access_token", uuid }
            };
            string unionId = Guid.NewGuid().ToString();
            await currentUser.AssociateAuthDataAndUnionId(authData, "qq", unionId);
        }
Ejemplo n.º 28
0
        public async Task Follow()
        {
            await LCUser.BecomeWithSessionToken(user2.SessionToken);

            Dictionary <string, object> attrs = new Dictionary <string, object> {
                { "score", 100 }
            };
            await user2.Follow(user1.ObjectId, attrs);

            await LCUser.BecomeWithSessionToken(user3.SessionToken);

            await user3.Follow(user2.ObjectId);
        }
Ejemplo n.º 29
0
    private async void Reload()
    {
        LCLeaderboard leaderboard = LCLeaderboard.CreateWithoutData(LeaderboadName);
        ReadOnlyCollection <LCRanking> rankings = await leaderboard.GetResults(limit : 10, selectUserKeys : new string[] { "nickname" });

        foreach (LCRanking ranking in rankings)
        {
            LCUser user = ranking.User;
            Debug.Log($"{user.GetNickname()} : ${ranking.Value}");
        }

        scrollRect.SetItemData(rankings);
    }
Ejemplo n.º 30
0
        public async Task <object> Hook(string className, string hookName, JsonElement body)
        {
            try {
                LCLogger.Debug($"Hook: {className}#{hookName}");
                LCLogger.Debug(body.ToString());

                LCEngine.CheckHookKey(Request);

                string classHookName = GetClassHookName(className, hookName);
                if (ClassHooks.TryGetValue(classHookName, out MethodInfo mi))
                {
                    Dictionary <string, object> data = LCEngine.Decode(body);

                    LCObjectData objectData = LCObjectData.Decode(data["object"] as Dictionary <string, object>);
                    objectData.ClassName = className;
                    LCObject obj = LCObject.Create(className);
                    obj.Merge(objectData);

                    // 避免死循环
                    if (hookName.StartsWith("before"))
                    {
                        obj.DisableBeforeHook();
                    }
                    else
                    {
                        obj.DisableAfterHook();
                    }

                    LCEngine.InitRequestContext(Request);

                    LCUser user = null;
                    if (data.TryGetValue("user", out object userObj) &&
                        userObj != null)
                    {
                        user = new LCUser();
                        user.Merge(LCObjectData.Decode(userObj as Dictionary <string, object>));
                        LCEngineRequestContext.CurrentUser = user;
                    }

                    LCObject result = await LCEngine.Invoke(mi, new object[] { obj }) as LCObject;

                    if (result != null)
                    {
                        return(LCCloud.Encode(result));
                    }
                }
                return(body);
            } catch (Exception e) {
                return(StatusCode(500, e.Message));
            }
        }