public async Task <IActionResult> Get( [FromServices] JoyOIUC UC, int?page, string username, CancellationToken token) { IQueryable <User> ret = DB.Users; if (!string.IsNullOrWhiteSpace(username)) { ret = ret.Where(x => x.UserName.Contains(username) || username.Contains(x.UserName)); } var result = await DoPaging(ret, page ?? 1, 50, token); var type = typeof(IdentityUser <Guid>); foreach (var x in result.data.result) { foreach (var y in type.GetProperties().Where(y => y.Name != nameof(IdentityUser.Id) && y.Name != nameof(IdentityUser.UserName))) { y.SetValue(x, y.PropertyType.IsValueType ? Activator.CreateInstance(y.PropertyType) : null); } } return(Json(result)); }
public async Task <IActionResult> Get( [FromServices] JoyOIUC UC, int?page, string username, CancellationToken token) { IQueryable <User> ret = DB.Users; if (!string.IsNullOrWhiteSpace(username)) { ret = ret.Where(x => x.UserName.Contains(username)); } if (IsGroupRequest()) { var subQuery = DB.GroupMembers.Where(x => x.GroupId == CurrentGroup.Id).Select(x => x.UserId); ret = ret.Where(x => subQuery.Contains(x.Id)); } var result = await DoPaging(ret.Select(x => new UserListViewModel { Id = x.Id, UserName = x.UserName, AvatarUrl = x.AvatarUrl }), page ?? 1, 50, token); FilterResult(result.data.result); return(Json(result)); }
public IActionResult Sign([FromServices] JoyOIUC UC, CancellationToken token) { if (string.IsNullOrEmpty(HttpContext.Session.GetString("user"))) { return(Content("Failed")); } var openId = Guid.Parse(HttpContext.Session.GetString("user")); var today = DateTime.UtcNow.Date; lock (rand) { if (DB.Records.Any(x => x.UserId == openId && x.Time >= today)) { return(Content("Signed")); } var rec = new Record { Coins = rand.Next(10, 50), Time = DateTime.UtcNow, UserId = openId }; DB.Records.Add(rec); UC.IncreaseExtensionCoinAsync(openId, HttpContext.Session.GetString("token"), "Coin", rec.Coins).Wait(); DB.SaveChanges(); return(Content(rec.Coins.ToString())); } }
public async Task <IActionResult> Message([FromServices] JoyOIUC UC, CancellationToken token) { if (User.IsSignedIn()) { return(Result(await UC.HasUnreadMessageAsync(User.Current.OpenId))); } return(Result(false)); }
public async Task <IActionResult> GetSessionCoin([FromServices] JoyOIUC UC, CancellationToken token) { if (User.IsSignedIn()) { return(Result((await UC.GetExtensionCoinAsync(User.Current.OpenId, null, "coin")).data)); } else { return(Result(401, "No Login")); } }
public async Task <IActionResult> Login([FromServices] JoyOIUC UC, string username, string password, CancellationToken token) { var result = await UC.TrustedAuthorizeAsync(username, password); if (result.succeeded) { HttpContext.Session.Clear(); HttpContext.Session.SetString("user", result.data.open_id.ToString()); HttpContext.Session.SetString("token", result.data.access_token.ToString()); return(Redirect("/")); } else { return(View("InvalidPwd")); } }
public async Task <IActionResult> GetSessionInfo([FromServices] JoyOIUC UC, CancellationToken token) { var ret = new Dictionary <string, object>(); ret.Add("isSignedIn", User.Current != null); if (User.Current != null) { var roles = await User.Manager.GetRolesAsync(User.Current); ret.Add("id", User.Current.Id); ret.Add("username", User.Current.UserName); ret.Add("email", User.Current.Email); ret.Add("role", roles.Count > 0 ? roles.First() : "Member"); ret.Add("tried", User.Current.TriedProblems.Object); ret.Add("passed", User.Current.PassedProblems.Object); ret.Add("chat", UC.GenerateChatWindowUrl(User.Current.OpenId)); } return(Result <dynamic>(ret)); }
public async Task <IActionResult> Login([FromServices] JoyOIUC UC, string username, string password) { var result = await UC.TrustedAuthorizeAsync(username, password); if (result.succeeded) { HttpContext.Session.SetInt32("login", 1); return(RedirectToAction("Index", "Home")); } else { return(Prompt(x => { x.Title = "登录失败"; x.Details = result.msg; x.StatusCode = 400; })); } }
public async Task <IActionResult> PutTestCasePurchase( [FromServices] JoyOIUC UC, string problemId, CancellationToken token) { // 判断是否已经购买 if (await DB.TestCasePurchases.AnyAsync(x => x.ProblemId == problemId && x.UserId == User.Current.Id, token)) { return(Result(400, "Already purchased")); } else if (!await ProblemIsVisiableAsync(problemId, token) && !IsMasterOrHigher && !await HasPermissionToProblemAsync(problemId, token)) { return(Result(401, "No permission")); } else { var coins = (await UC.GetExtensionCoinAsync(User.Current.OpenId, null, Constants.CoinField)).data; if (coins < TestCasePurchase.Cost && !IsMasterOrHigher && !await HasPermissionToProblemAsync(problemId, token)) { return(Result(400, string.Format("You only have {0} coins, but the problem requires {1}", coins, TestCasePurchase.Cost))); } else { await UC.DecreaseExtensionCoinAsync(User.Current.OpenId, null, Constants.CoinField, TestCasePurchase.Cost); DB.TestCasePurchases.Add(new TestCasePurchase { ProblemId = problemId, CreatedTime = DateTime.UtcNow, UserId = User.Current.Id }); await DB.SaveChangesAsync(token); return(Result(200, "Succeeded")); } } }
public async Task <IActionResult> Login( string Username, string Password, string RedirectUrl, [FromServices] JoyOIUC UC) { var authorizeResult = await UC.TrustedAuthorizeAsync(Username, Password); if (authorizeResult.succeeded) { var profileResult = await UC.GetUserProfileAsync(authorizeResult.data.open_id, authorizeResult.data.access_token); User user = await UserManager.FindByNameAsync(Username); if (user == null) { user = new User { Id = authorizeResult.data.open_id, UserName = Username, Email = profileResult.data.email, PhoneNumber = profileResult.data.phone, SiteName = profileResult.data.nickname, Template = "Default", AccessToken = authorizeResult.data.access_token, ExpireTime = authorizeResult.data.expire_time, OpenId = authorizeResult.data.open_id, AvatarUrl = UC.GetAvatarUrl(authorizeResult.data.open_id) }; await UserManager.CreateAsync(user, Password); } if (authorizeResult.data.is_root) { await UserManager.AddToRoleAsync(user, "Root"); } var username = (await UC.GetUsernameAsync(authorizeResult.data.open_id, authorizeResult.data.access_token)).data; var domain = string.Format(Configuration["Host:DomainTemplate"], username); if (!DB.DomainBindings.Any(x => x.Domain == domain)) { DB.DomainBindings.Add(new DomainBinding { Domain = domain, UserId = authorizeResult.data.open_id }); DB.SaveChanges(); } await SignInManager.SignInAsync(user, true); if (!string.IsNullOrWhiteSpace(RedirectUrl)) { return(Redirect(RedirectUrl)); } else { return(RedirectToAction("Index")); } } else { return(Prompt(x => { x.Title = SR["Sign in failed"]; x.Details = authorizeResult.msg; x.StatusCode = authorizeResult.code; })); } }
public async Task <IActionResult> Message([FromServices] JoyOIUC UC, CancellationToken token) { return(Result(await UC.HasUnreadMessage(User.Current.OpenId))); }
public async Task <IActionResult> PutSession([FromServices] JoyOIUC UC, CancellationToken token) { var login = JsonConvert.DeserializeObject <Login>(RequestBody); var authorizeResult = await UC.TrustedAuthorizeAsync(login.Username, login.Password); if (authorizeResult.succeeded) { var profileResult = await UC.GetUserProfileAsync(authorizeResult.data.open_id, authorizeResult.data.access_token); User user = await UserManager.FindByNameAsync(login.Username); if (user == null) { user = new User { Id = authorizeResult.data.open_id, UserName = login.Username, Email = profileResult.data.email, PhoneNumber = profileResult.data.phone, AccessToken = authorizeResult.data.access_token, ExpireTime = authorizeResult.data.expire_time, OpenId = authorizeResult.data.open_id, AvatarUrl = UC.GetAvatarUrl(authorizeResult.data.open_id) }; await UserManager.CreateAsync(user, login.Password); } var roles = await UserManager.GetRolesAsync(user); if (authorizeResult.data.is_root) { if (!roles.Any(x => x == "Root")) { await UserManager.AddToRoleAsync(user, "Root"); } } else { if (roles.Any(x => x == "Root")) { await UserManager.RemoveFromRoleAsync(user, "Root"); } } await SignInManager.SignInAsync(user, true); user.LastLoginTime = DateTime.Now; DB.SaveChanges(); var cookie = HttpContext.Response.Headers["Set-Cookie"].ToString(); var expire = DateTime.Parse(CookieExpireRegex.Match(cookie).Value).ToTimeStamp(); return(Result <dynamic>(new { Cookie = cookie .Replace(" httponly", "") .Replace("samesite=lax", "") .Replace("path=/;", ""), Expire = expire })); } else { return(Result(400, authorizeResult.msg)); } }