Update MD2
This commit is contained in:
@@ -0,0 +1,243 @@
|
||||
using Church.Net.DAL.EF;
|
||||
using Church.Net.DAL.EFCoreDBF.Core;
|
||||
using Church.Net.Entity;
|
||||
using Church.Net.Utility;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NuGet.Common;
|
||||
using NuGet.ProjectModel;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using WebAPI.Logics.Interface;
|
||||
using WebAPI.ViewModel;
|
||||
using static QRCoder.PayloadGenerator;
|
||||
|
||||
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
|
||||
namespace WebAPI.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
public class PasswordLoginController : ControllerBase
|
||||
{
|
||||
private readonly ChurchNetContext churchNetContext;
|
||||
private readonly ICrudLogic<FamilyMember> crudLogic;
|
||||
private readonly ICombinedKeyCrudLogic<PastoralDomainMembers> relationLogic;
|
||||
private readonly ICrudLogic<PastoralDomain> domainLogic;
|
||||
|
||||
// POST api/<PasswordLoginController>
|
||||
public PasswordLoginController(
|
||||
ICrudLogic<FamilyMember> crudLogic,
|
||||
ICombinedKeyCrudLogic<PastoralDomainMembers> relationLogic,
|
||||
ICrudLogic<PastoralDomain> domainLogic,
|
||||
DatabaseOptions databaseOptions
|
||||
)
|
||||
{
|
||||
this.crudLogic = crudLogic;
|
||||
this.relationLogic = relationLogic;
|
||||
this.domainLogic = domainLogic;
|
||||
churchNetContext = databaseOptions.GetDbContext();
|
||||
}
|
||||
[HttpPost]
|
||||
[Route("auth/login")]
|
||||
public LoginTokenViewModel Login([FromBody] RegisterViewModel value)
|
||||
{
|
||||
FamilyMember member = null;
|
||||
if (string.IsNullOrEmpty(value.OAuthType))
|
||||
{
|
||||
value.Email = value.Email.Trim().ToLower();
|
||||
member = crudLogic.First(f => f.Password == value.Password && f.Email.ToLower() == value.Email.ToLower());
|
||||
//member = this.churchNetContext.FamilyMembers
|
||||
// .Where(f => f.Password == value.Password && f.Email.ToLower() == value.Email.ToLower()).FirstOrDefault();
|
||||
}
|
||||
return ToLoginTokenViewModel(member);
|
||||
}
|
||||
[HttpPost]
|
||||
[Route("auth/sign-up")]
|
||||
[Route("auth/oauth-login")]
|
||||
public LoginTokenViewModel SignUp([FromBody] RegisterViewModel value)
|
||||
{
|
||||
FamilyMember member = null;
|
||||
string loginToken = "";
|
||||
if (!string.IsNullOrEmpty(value.OAuthType))
|
||||
{
|
||||
|
||||
if (value.OAuthType == "google")
|
||||
{
|
||||
if (false == this.GetGoogleLoginInfo(ref value)) return null;
|
||||
}
|
||||
|
||||
var userId = this.churchNetContext.FamilyMemberOAuths
|
||||
.Where(f => f.OAuthType == value.OAuthType && f.OAuthAccessToken == value.AccessToken)
|
||||
.Select(f => f.FamilyMemberId).FirstOrDefault();
|
||||
if (string.IsNullOrEmpty(userId))
|
||||
{
|
||||
value.Email = value.Email.Trim().ToLower();
|
||||
|
||||
member = this.churchNetContext.FamilyMembers
|
||||
.Where(m => m.Email.ToLower() == value.Email)
|
||||
.FirstOrDefault();
|
||||
if (member == null)
|
||||
{
|
||||
member = new FamilyMember()
|
||||
{
|
||||
Id = StringHelper.Get33BaseGuid(),
|
||||
FirstName = value.FirstName,
|
||||
LastName = value.LastName,
|
||||
Email = value.Email,
|
||||
AvatarImage = value.AvatarImage,
|
||||
Password = StringHelper.Get33BaseGuid()
|
||||
};
|
||||
churchNetContext.Add(member);
|
||||
}
|
||||
else
|
||||
{
|
||||
member.AvatarImage = value.AvatarImage;
|
||||
member.FirstName = value.FirstName;
|
||||
member.LastName = value.LastName;
|
||||
churchNetContext.Update(member);
|
||||
}
|
||||
churchNetContext.Add(new FamilyMemberOAuth()
|
||||
{
|
||||
FamilyMemberId = member.Id,
|
||||
OAuthType = value.OAuthType,
|
||||
OAuthAccessToken = value.AccessToken
|
||||
});
|
||||
|
||||
churchNetContext.SaveChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
member = this.churchNetContext.FamilyMembers
|
||||
.Where(f => f.Id == userId).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
value.Email = value.Email.Trim().ToLower();
|
||||
if (!this.churchNetContext.FamilyMembers
|
||||
.Any(f => f.Email == value.Email))
|
||||
{
|
||||
member = new FamilyMember()
|
||||
{
|
||||
Id = StringHelper.Get33BaseGuid(),
|
||||
FirstName = value.FirstName,
|
||||
LastName = value.LastName,
|
||||
Email = value.Email,
|
||||
AvatarImage = value.AvatarImage,
|
||||
Password = value.Password
|
||||
};
|
||||
|
||||
churchNetContext.Add(member);
|
||||
|
||||
churchNetContext.SaveChanges();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return ToLoginTokenViewModel(member);
|
||||
|
||||
}
|
||||
[HttpPost]
|
||||
[Route("auth/request-pass")]
|
||||
public void RequestPassword([FromBody] RegisterViewModel value)
|
||||
{
|
||||
}
|
||||
[HttpPost]
|
||||
[Route("auth/reset-pass")]
|
||||
public void ResetPassword([FromBody] RegisterViewModel value)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
[HttpPost]
|
||||
[Route("auth/loginwithtoken")]
|
||||
public LoginTokenViewModel LoginWithToken([FromBody] LoginTokenViewModel value)
|
||||
{
|
||||
var memberId = TokenHelper.GetUserIdFromToken(value.Token);
|
||||
if (!string.IsNullOrWhiteSpace(memberId))
|
||||
{
|
||||
|
||||
var member = crudLogic.First(f => f.Id == memberId);
|
||||
//var member = this.churchNetContext.FamilyMembers
|
||||
// .Where(f => f.Id == memberId).FirstOrDefault();
|
||||
return ToLoginTokenViewModel(member);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private LoginTokenViewModel ToLoginTokenViewModel(FamilyMember member)
|
||||
{
|
||||
if (member != null)
|
||||
{
|
||||
DateTime expiredTime = DateTime.Now.AddDays(30);
|
||||
string token = TokenHelper.GenerateToken(member.Id, expiredTime);
|
||||
|
||||
|
||||
var cellGroupId = churchNetContext.PastoralDomainMembers.Where(d => d.FamilyMemberId == member.Id).Select(d => d.PastoralDomainId).FirstOrDefault();
|
||||
|
||||
PastoralDomain cellGroup;
|
||||
if (string.IsNullOrEmpty(cellGroupId))
|
||||
{
|
||||
cellGroup = churchNetContext.PastoralDomains.First();
|
||||
relationLogic.Create(new PastoralDomainMembers(cellGroup.Id, member.Id));
|
||||
}
|
||||
else
|
||||
{
|
||||
cellGroup = churchNetContext.PastoralDomains.Where(g=>g.Id== cellGroupId).First();
|
||||
|
||||
}
|
||||
|
||||
return new LoginTokenViewModel()
|
||||
{
|
||||
MemberId = member.Id,
|
||||
FirstName = member.FirstName,
|
||||
LastName = member.LastName,
|
||||
AvatarImage = member.AvatarImage,
|
||||
Email = member.Email,
|
||||
Token = token,
|
||||
TokenExpireTime = expiredTime,
|
||||
Role = member.Role,
|
||||
CellGroup= cellGroup
|
||||
};
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private bool GetGoogleLoginInfo(ref RegisterViewModel model)
|
||||
{
|
||||
string uri = $"https://www.googleapis.com/oauth2/v2/userinfo?access_token={model.AccessToken}";
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
|
||||
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
|
||||
|
||||
try
|
||||
{
|
||||
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
|
||||
using (Stream stream = response.GetResponseStream())
|
||||
using (StreamReader reader = new StreamReader(stream))
|
||||
{
|
||||
string result = reader.ReadToEnd();
|
||||
var obj = JsonConvert.DeserializeObject<JObject>(result);
|
||||
if (obj.TryGetValue("email", out JToken value))
|
||||
{
|
||||
model.Email = ((string)value).ToLower().Trim();
|
||||
model.FirstName = obj.GetValue<string>("given_name");
|
||||
model.LastName = obj.GetValue<string>("family_name");
|
||||
model.AvatarImage = obj.GetValue<string>("picture");
|
||||
model.AccessToken = obj.GetValue<string>("id");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user