public async Task <IActionResult> InicioDeSesionAdmin(Administrador ad) { celularesContext context = new celularesContext(); UsuarioRepository <Administrador> directorRepos = new UsuarioRepository <Administrador>(context); var director = context.Administrador.FirstOrDefault(x => x.Clave == ad.Clave); try { if (director != null && director.Contrasena == HashHelp.GetHelper(ad.Contrasena)) { List <Claim> info = new List <Claim>(); info.Add(new Claim(ClaimTypes.Name, "Usuario" + director.Nombre)); info.Add(new Claim(ClaimTypes.Role, "Admin")); info.Add(new Claim("Clave", director.Nombre.ToString())); info.Add(new Claim("Nombre", director.Nombre)); var claimsidentity = new ClaimsIdentity(info, CookieAuthenticationDefaults.AuthenticationScheme); var claimsprincipal = new ClaimsPrincipal(claimsidentity); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsprincipal, new AuthenticationProperties { IsPersistent = true }); return(RedirectToAction("Index")); } else { ModelState.AddModelError("", "La clave o la contraseña del administrador son incorrectas."); return(View(ad)); } } catch (Exception ex) { ModelState.AddModelError("", ex.Message); return(View(ad)); } }
public static async ValueTask <CQCode> Image(string url, CQFileType type = default, IHttpClientFactory httpClientFactory = default) { HttpClient client; byte[] data; switch (type) { case CQFileType.Url: return(CQCode.CQImage(url)); case CQFileType.Base64: client = httpClientFactory == default ? new HttpClient() : httpClientFactory.CreateClient("default"); data = await client.GetByteArrayAsync(url); return(CQCode.CQImage("base64://" + Convert.ToBase64String(data))); case CQFileType.File: Uri uri = new(url); client = httpClientFactory == default ? new HttpClient() : httpClientFactory.CreateClient("default"); data = await client.GetByteArrayAsync(uri); var filePath = ImageCachePath + HashHelp.MD5Encrypt(data) + Path.GetExtension(uri.Segments.Last()); await File.WriteAllBytesAsync(filePath, data); return(CQCode.CQImage(new Uri(filePath).AbsoluteUri)); default: return(null); } }
[HttpPost] // TODO - is this password validation location? public IActionResult LogOn(LogOnViewModel logOnViewModel) { if (ModelState.IsValid) { string email = logOnViewModel.Email; string password = logOnViewModel.Password; // TODO - if (chkUser == null) {} .... //var getUser = (from s in context.ObjRegisterUser where s.UserName == userName || s.EmailId == userName select s).FirstOrDefault(); (((( Just an example for ideas that I copied)) var getUser = (from s in context.Users where s.Email == email || s.PasswordHash == email select s).FirstOrDefault(); if (getUser != null) { var hashCode = getUser.HashCode; //Password Hasing Process Call Helper Class Method var encodingPasswordString = HashHelp.EncodePassword(password, hashCode); //Check Login Detail User Name Or Password var query = (from s in context.Users where (s.Email == email || s.PasswordHash == email) && s.PasswordHash.Equals(encodingPasswordString) select s).FirstOrDefault(); if (query != null) { string screenName = getUser.ScreenName; HttpContext.Session.Clear(); HttpContext.Session.SetString("_Email", email); // TODO - added as per session guide. HttpContext.Session.SetString("_ScreenName", screenName); return(Redirect("/Welcome")); } ViewBag.ErrorMessage = "Invalid User Name and/or Password "; return(View()); } ViewBag.ErrorMessage = "Invalid User Name and/or Password "; return(View()); } return(View(logOnViewModel)); }
public async Task <bool> Login(HttpContext httpContext, UserLoginModel model) { // Hash login password. string plainPassword = model.Password; string hashedPassword = HashHelp.GetSha512Hash(plainPassword); // Find user. var users = _database.GetCollection <User>(User.CollectionName); var foundUser = users.Where(u => u.UserName.Equals(model.UserName) && u.Password.Equals(hashedPassword)).FirstOrDefault(); if (foundUser != null) { var claims = new List <Claim> { new Claim(ClaimTypes.NameIdentifier, foundUser.Id.ToString()), new Claim(ClaimTypes.Name, foundUser.UserName), new Claim(ClaimTypes.Email, foundUser.Email) }; var claimsIdentity = new ClaimsIdentity( claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties { // Refreshing the authentication session should be allowed. AllowRefresh = true, // Set login cookie duration the same as sliding login configuration in start up. ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10), IsPersistent = true, IssuedUtc = DateTimeOffset.UtcNow }; await httpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return(true); } return(false); }
public bool Register(UserRegistrationModel model) { var filterBuilder = Builders <User> .Filter; var filter = filterBuilder.Eq(x => x.UserName, model.Username) | filterBuilder.Eq(x => x.Email, model.Email); var duplicateEntity = _database.FindOneByFilter(User.CollectionName, filter); // TODO: Return message that there is a duplicate and which one is duplicate. if (duplicateEntity != null) { return(false); } string plainPassword = model.Password; string hashedPassword = HashHelp.GetSha512Hash(plainPassword); var user = new User(model.Username, hashedPassword, model.Email); _database.Create(user, User.CollectionName); return(true); }
public static async ValueTask <CQCode> Video(string url, CQFileType type = default, string cover = default, IHttpClientFactory httpClientFactory = default) { switch (type) { case CQFileType.Url: return(CQCode.CQVideo(url, cover)); case CQFileType.Base64: throw new NotSupportedException("Video不支持Base64发送"); case CQFileType.File: Uri uri = new(url); var client = httpClientFactory == default ? new HttpClient() : httpClientFactory.CreateClient("default"); var data = await client.GetByteArrayAsync(uri); var filePath = VideoCachePath + HashHelp.MD5Encrypt(data) + Path.GetExtension(uri.Segments.Last()); await File.WriteAllBytesAsync(filePath, data); return(CQCode.CQVideo(new Uri(filePath).AbsoluteUri, cover)); default: return(null); } }
[HttpPost] // TODO - Need Better validation on all entry Fields!!. public IActionResult Register(RegisterUserViewModel registerUserViewModel) { if (ModelState.IsValid) { int errorCount = 0; //Check if "password" and "confirm password" match: if (registerUserViewModel.Password != registerUserViewModel.ConfirmPassword) { errorCount++; ViewBag.PasswordMatchError = "Passwords do not match"; } // Check if Email is already used in DB. IList <User> usersMatchingEmail = context.Users .Where(u => u.Email == registerUserViewModel.Email) .ToList(); if (usersMatchingEmail.Count > 0) { ViewBag.EmailInUse = "Email is already in use."; errorCount++; } // Check if Screen Name is already used in DB. IList <User> usersMatchingScreenName = context.Users .Where(u => u.ScreenName == registerUserViewModel.ScreenName) .ToList(); if (usersMatchingScreenName.Count > 0) { ViewBag.ScreenNameInUse = "Screen Name is already in use."; errorCount++; } //// stackoverflow.com/questions/5342375/regex-email-validation try { MailAddress m = new MailAddress(registerUserViewModel.Email); } catch (FormatException) { ViewBag.EmailError = "Invalid Email address."; errorCount++; //return View(registerUserViewModel); } //// if (registerUserViewModel.PhoneNumber != null) { ////www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s02.html Regex phoneRegex = new Regex(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$"); if (phoneRegex.IsMatch(registerUserViewModel.PhoneNumber)) { formattedPhoneNumber = phoneRegex.Replace(registerUserViewModel.PhoneNumber, "($1) $2-$3"); } else { // TODO - Invalid phone number ViewBag.error errorCount++; ViewBag.PhoneNumberError = "Invalid Phone Number"; //return View(registerUserViewModel); } //// } if (errorCount > 0) { return(View(registerUserViewModel)); } var newSalt = HashHelp.GeneratePassword(10); var passwordHash = HashHelp.EncodePassword(registerUserViewModel.Password, newSalt); User newUser = new User { ScreenName = registerUserViewModel.ScreenName, Email = registerUserViewModel.Email, PasswordHash = passwordHash, HashCode = newSalt, CreationTime = DateTime.Now, ModificationTime = DateTime.Now, PhoneNumber = formattedPhoneNumber };// TODO - Why would I need to "Clear a ModelState"? context.Users.Add(newUser); context.SaveChanges(); HttpContext.Session.Clear(); HttpContext.Session.SetString("_Email", registerUserViewModel.Email); // TODO - added as per session guide. HttpContext.Session.SetString("_ScreenName", registerUserViewModel.ScreenName); return(Redirect("/User")); } return(View(registerUserViewModel)); }
/// <summary> /// 发送一个消息包 /// </summary> /// <param name="packet"></param> /// <param name="needencrypt">是否加密</param> /// <returns></returns> public override void SendPacket(Packet packet, bool encrypt_if_need) { if (m_sendlock == null) { UnityEngine.Debug.Log("m_sendlock == null"); return; } lock (this) { packet.SerialNumber = m_lastSendPacketSerialNumber; m_lastSendPacketSerialNumber++; byte[] data = packet.ToArray(); int datalength = packet.Length; PacketFlag packetflag = packet.PacketFlag; //加密,压缩消息包 if (m_secure_connection && m_connectionState == ConnectionState.Connected) { if (tls_sendSecureBuffer == null) { tls_sendSecureBuffer = new byte[Packet.MaxLength]; } //压缩 bool compressed = false; #if _NC_Compress if (data.Length > Packet.NeedCompressMinLength) { int outlen = Compress.LZO.Compress(data, Packet.NoCryptHeaderLength, data.Length - Packet.NoCryptHeaderLength, tls_sendSecureBuffer, Packet.NoCryptHeaderLength); if (outlen <= (data.Length - 20)) //压缩有实际效果 { //Buffer.BlockCopy(m_sendSecureBuffer, 0, data, Packet.NoCryptHeaderLength, outlen); datalength = outlen + Packet.NoCryptHeaderLength; Buffer.BlockCopy(data, 0, tls_sendSecureBuffer, 0, Packet.NoCryptHeaderLength); if (m_compressneedchecksum) { uint crccheck = HashHelp.CRC32hash(tls_sendSecureBuffer, Packet.NoCryptHeaderLength, outlen); ArrayUtility.SetInt(tls_sendSecureBuffer, (int)crccheck, datalength); datalength += 4; } packetflag |= PacketFlag.Compressed; data = tls_sendSecureBuffer; compressed = true; } } if (encrypt_if_need && m_encrypt != null) { if (!compressed) { Buffer.BlockCopy(data, 0, tls_sendSecureBuffer, 0, datalength); data = tls_sendSecureBuffer; } m_encrypt.Encrypt(data, Packet.NoCryptHeaderLength, datalength - Packet.NoCryptHeaderLength); packetflag |= PacketFlag.Encrypted; } #endif } //设置消息长度 ArrayUtility.SetByte(data, (byte)packetflag, Packet.OffsetFlag); ArrayUtility.SetShort(data, (short)datalength, Packet.OffsetLength); this.Send(data, datalength); } }
//把底层传来的数据分多次提交给使用者。 //每次提交的数据称为包,其大小记录在包头,所有的包顺序排列。 //如果现存的数据不足包长,则等待后续数据。 protected override void OnReceivedDataCallBack(byte[] data /*整个包的起始地址,已在下层进行拼接*/, int length) { if (m_connectionState == ConnectionState.Uninitialised || length <= 0) { return; } m_iSegmentSize += length; //合并收到的包 int startOffset = 0; //amount for the submits to user. int rawpacketlength = 0; //user packet size while (m_iSegmentSize >= Packet.HeaderSize) { //从消息头中读出包长度 m_lengthOfCurrentPacket = Util.ArrayUtility.GetShort(data, startOffset + Packet.OffsetLength); //包长错误,忽略此包 if (m_lengthOfCurrentPacket < Packet.HeaderSize || m_lengthOfCurrentPacket > Packet.MaxLength) { m_iSegmentSize = 0; return; } //数据不够组成一个消息包,等待后续数据 if (m_iSegmentSize < m_lengthOfCurrentPacket) { break; } rawpacketlength = m_lengthOfCurrentPacket; //按顺序读出包ID,DispatcherID,和标记位 m_packetIDOfCurrentPacket = ArrayUtility.GetShort(data, startOffset + Packet.OffsetPacketID); m_dispatcherIDOfCurrentPacket = ArrayUtility.GetInt(data, Packet.OffsetDispatcherID + startOffset); m_magicnumOfCurrentPacket = Util.ArrayUtility.GetByte(data, startOffset + Packet.OffsetFlag); //HandleOneRawPacket(); //处理明文数据(不加密也不压缩) if ((m_magicnumOfCurrentPacket & (short)PacketFlag.Encrypted) == 0 && (m_magicnumOfCurrentPacket & (short)PacketFlag.Compressed) == 0) { //int packetserialnum = ArrayUtility.GetInt(data, 8 + startOffset); //包的序列号错误 //if (packetserialnum != m_lastRecvPacketSerialNumber) //{ // packetserialnum = m_lastRecvPacketSerialNumber;//why? // if (m_encrypt != null)//非加密连接,出错就不管了,警告一下 // { // CloseConnection(); // return; // } // Console.WriteLine("Error:TcpConnection packetserialnum != m_lastRecvPacketSerialNumber!"); //} m_lastRecvPacketSerialNumber++; ProcessPacket(m_packetIDOfCurrentPacket, data, m_lengthOfCurrentPacket, startOffset); } else //解密解压消息 { int securedatalength = m_lengthOfCurrentPacket - Packet.NoCryptHeaderLength; if (securedatalength <= 0 || m_encrypt == null) { CloseConnection(); return; } System.Buffer.BlockCopy(data, startOffset, m_lastPacketData, 0, m_lengthOfCurrentPacket); #if _NC_Compress //解密 if ((m_magicnumOfCurrentPacket & (short)PacketFlag.Encrypted) == (short)PacketFlag.Encrypted) { m_encrypt.Decrypt(m_lastPacketData, Packet.NoCryptHeaderLength, securedatalength); m_magicnumOfCurrentPacket &= ~(short)PacketFlag.Encrypted; } //解压 if ((m_magicnumOfCurrentPacket & (short)PacketFlag.Compressed) == (short)PacketFlag.Compressed) { if (m_compressneedchecksum) { //check src32 uint crccheck = (uint)ArrayUtility.GetInt(m_lastPacketData, securedatalength); securedatalength -= 4; uint crccomp = HashHelp.CRC32hash(m_lastPacketData, Packet.NoCryptHeaderLength, securedatalength); if (crccheck != crccomp) { CloseConnection(); return; } } if (tls_decompressbuffer == null) { tls_decompressbuffer = new byte[Packet.MaxLength]; } int outlen = Compress.LZO.Decompress(m_lastPacketData, Packet.NoCryptHeaderLength, securedatalength, tls_decompressbuffer, 0); if (outlen <= Packet.HeaderSize - Packet.NoCryptHeaderLength || outlen >= Packet.MaxLength - Packet.NoCryptHeaderLength) //解压失败 { CloseConnection(); return; } m_magicnumOfCurrentPacket &= ~(short)PacketFlag.Compressed; Buffer.BlockCopy(tls_decompressbuffer, 0, m_lastPacketData, Packet.NoCryptHeaderLength, outlen); m_lengthOfCurrentPacket = (short)(Packet.NoCryptHeaderLength + outlen); } #endif m_packetIDOfCurrentPacket = ArrayUtility.GetInt(m_lastPacketData, 4); int packetserialnum = ArrayUtility.GetInt(m_lastPacketData, 8); if (packetserialnum != m_lastRecvPacketSerialNumber) { packetserialnum = m_lastRecvPacketSerialNumber; //why? CloseConnection(); return; } m_lastRecvPacketSerialNumber++; ArrayUtility.SetShort(m_lastPacketData, m_magicnumOfCurrentPacket, 0); m_dispatcherIDOfCurrentPacket = ArrayUtility.GetInt(m_lastPacketData, 12); ProcessPacket(m_packetIDOfCurrentPacket, m_lastPacketData, m_lengthOfCurrentPacket, 0); } if (m_connectionState == ConnectionState.Uninitialised) { return; } m_iSegmentSize -= rawpacketlength; startOffset += rawpacketlength; } if (startOffset > 0 && m_iSegmentSize > 0) { System.Buffer.BlockCopy(data, startOffset, m_RecvBuffer, 0, m_iSegmentSize); } }
private List <CQCode> GetTweetContent(Tweet tweet) { var temp = new List <CQCode> { CQCode.CQText(tweet.Content) }; var img = new List <CQCode>(); if (tweet.Media != null) { foreach (var item in tweet.Media) { try { var data = HttpNet.Get(item["media_url_https"].ToString(), proxy: _config.Proxy); img.Add(CQCode.CQImage("base64://" + Convert.ToBase64String(data), useCache: true)); } catch (Exception e) { img.Add(CQCode.CQText($"Error: {e.Message}")); } switch (item["type"].ToString()) { case "photo": { break; } case "video": { var mp4 = item["video_info"]["variants"] .FirstOrDefault(video => video["content_type"].ToString() == "video/mp4"); if (mp4 != null) { img.Add(CQCode.CQText(mp4["url"].ToString())); var data = HttpNet.Get(mp4["url"].ToString(), proxy: _config.Proxy); var tempPath = AppDomain.CurrentDomain.BaseDirectory + "cache\\" + HashHelp.MD5Encrypt(data); File.WriteAllBytes(tempPath, data); img.Add(CQCode.CQVideo(tempPath, useCache: true)); } else { img.Add(CQCode.CQText(item["video_info"]["variants"][0]["url"].ToString())); } break; } case "animated_gif": { var mp4 = item["video_info"]["variants"] .FirstOrDefault(video => video["content_type"].ToString() == "video/mp4"); if (mp4 != null) { img.Add(CQCode.CQText(mp4["url"].ToString())); var data = HttpNet.Get(mp4["url"].ToString(), proxy: _config.Proxy); var tempPath = AppDomain.CurrentDomain.BaseDirectory + "cache\\" + HashHelp.MD5Encrypt(data); File.WriteAllBytes(tempPath, data); img.Add(CQCode.CQVideo(tempPath, useCache: true)); } else { img.Add(CQCode.CQText(item["video_info"]["variants"][0]["url"].ToString())); } break; } } } } if (tweet.IsOnlyRetweet) { if (tweet.Retweet == null) { return(new List <CQCode> { CQCode.CQText("error") }); } else { var a = new List <CQCode> { CQCode.CQText(tweet.Retweet.UserName + ":\n") }; a.AddRange(GetTweetContent(tweet.Retweet)); return(a); } } else { var time = CQCode.CQText("\n发送时间:" + tweet.CreatTime.ToString("yyyy-MM-dd HH:mm")); if (tweet.Retweet == null) { temp.AddRange(img); temp.Add(time); return(temp); } else { temp.AddRange(img); temp.Add(time); temp.Add(CQCode.CQText("\n" + tweet.Retweet.UserName + ":\n")); temp.AddRange(GetTweetContent(tweet.Retweet)); return(temp); } } }