/// <summary> /// 创建HttpTunnel /// </summary> /// <param name="proxyClient"></param> /// <param name="cmd"></param> /// <returns></returns> /// <exception cref="System.Net.TunnelStateMissingException"></exception> private HttpClient CreateTunnel(TunnelCommand cmd, TcpClient proxyClient) { var tunnel = new HttpClient((Uri)xHttpServer.GetRandom(this.ServerBalance)); switch (cmd) { case TunnelCommand.KeepAlive: tunnel.KeepAlive = false; break; default: tunnel.KeepAlive = true; break; } tunnel.SendReceiveTimeout = xHttpHandler.Timeout * 1000; var cred = this.Credential; tunnel.Headers[xHttpHandler.AgentAuth] = CryptoManaged.MD5Hex(string.Format("{0}:{1}", cred.UserName, cred.Password)); if (proxyClient != null) { var state = this.GetClientState(proxyClient); tunnel.Headers[xHttpHandler.AgentSock] = state.UniqueID.ToString("N"); tunnel.Headers[xHttpHandler.AgentDirect] = state.ToString(); } var rRemoteID = this.ReverseRemoteID; if (rRemoteID != null) { tunnel.Headers[xHttpHandler.AgentReverse] = string.Format("{0}#{1}", _clientID.ToString("N"), rRemoteID.Value.ToString("N")); } tunnel.Form[xHttpHandler.AgentCommand] = ((int)cmd).ToString(); return(tunnel); }
public void ChangePassword(ChangePasswordParameter param) { using (var context = base.CreateUserContext()) { EmailAuth emailAuth = null; MobileAuth mobileAuth = null; if (param.AuthCode != null) { Guid emailAuthCode; if (Guid.TryParse(param.AuthCode, out emailAuthCode)) { emailAuth = this.CheckUserEmailAuth(context, emailAuthCode); } else { string[] mobileAuthCode = param.AuthCode.Split(','); if (mobileAuthCode.Length != 2) { throw new InvalidInvokeException("参数错误"); } mobileAuth = this.CheckUserMobileAuth(context, mobileAuthCode[0], int.Parse(mobileAuthCode[1])); param.UserName = mobileAuth.UserName; } } var id = this.SignIn(new SignInParameter() { AppID = param.AppID, UserName = param.UserName, Password = param.OldPassword }); if (!id.IsAuthenticated) { throw new InvalidInvokeException("账户不存在或密码错误"); } using (var scope = DbScope.Create()) { scope.BeginTransaction(); param.NewPassword = CryptoManaged.MD5Hex(param.NewPassword); context.Accounts.Update(t => t.RowID == id.UserID, t => new Account() { Password = param.NewPassword }); if (emailAuth != null) { emailAuth.Status = (int)ActivationStatus.Activated; } if (mobileAuth != null) { mobileAuth.Status = (int)ActivationStatus.Activated; } context.SaveChanges(); scope.Complete(); } } }
/// <summary> /// 注册 /// </summary> /// <param name="param"></param> public void SignUp(SignUpParameter param) { string orgPwd = param.Password; param.Password = CryptoManaged.MD5Hex(param.Password); using (var scope = DbScope.Create()) using (var context = base.CreateUserContext()) { scope.BeginTransaction(); if (this.IsUserNameExists(new IsUserNameExistsParameter() { AppID = param.AppID, UserName = param.UserName })) { throw new InvalidInvokeException(SignUpErrorCode.AccountExist.ToDescription()); } var dataObj = new Account(); EntityMapper.Map <SignUpParameter, Account>(param, dataObj); dataObj.RowID = Guid.NewGuid(); dataObj.CreateDate = DateTime.Now; context.Accounts.Add(dataObj); context.SaveChanges(); if (param.SmsCode != default(int)) { VerifyMobile(new VerifyMobileParameter() { Mobile = param.Mobile, SmsCode = param.SmsCode }); } scope.Complete(); if (!string.IsNullOrEmpty(param.Email)) { this.SendAuthEmail(new SendAuthEmailParameter() { AppID = param.AppID, UserID = dataObj.RowID, Email = param.Email, Kind = AuthEmailKind.SignUp }); } } }
static xHttpHandler() { ushort.TryParse(ConfigurationManager.AppSettings["Agent-MaxDevice"], out MaxDevice); Host = ConfigurationManager.AppSettings["Agent-Host"]; var q = from t in (ConfigurationManager.AppSettings["Agent-BlockPorts"] ?? string.Empty).Split(',') where !string.IsNullOrEmpty(t) select ushort.Parse(t); BlockPorts = q.ToArray(); CryptoKey = ConfigurationManager.AppSettings["Agent-CryptoKey"]; var q2 = from t in (ConfigurationManager.AppSettings["Agent-Credentials"] ?? string.Empty).Split(',') where !string.IsNullOrEmpty(t) select CryptoManaged.MD5Hex(t); OnlineUsers = new xUserManager(q2.ToArray()); }
public override void OnEntry(MethodExecutionArgs args) { string hashKey = args.Arguments.Count > 0 ? CryptoManaged.MD5Hex(JsonConvert.SerializeObject(args.Arguments, Formatting.None)) : string.Empty; string key = string.Format("{0}.{1}{2}", args.Method.DeclaringType.Name, args.Method.Name, hashKey); object result = Cache[key]; if (result != null) { args.FlowBehavior = FlowBehavior.Return; args.ReturnValue = result; } else { args.MethodExecutionTag = key; } base.OnEntry(args); }
void IHttpClient.DownloadFile(Uri fileUrl, out string fileName) { var client = (IHttpClient)this; fileName = fileUrl.OriginalString; int i = fileName.LastIndexOf("?"); if (i != -1) { fileName = fileName.Remove(i); } fileName = CryptoManaged.MD5Hex(fileUrl.OriginalString) + Path.GetExtension(fileName); string localPath = client.SaveFileDirectory + fileName; var waitDuration = client.RetryWaitDuration; try { if (!App.Retry(() => { this.SetRequest(fileUrl); this.DownloadFile(localPath); var file = new FileInfo(localPath); return(file.Exists && file.Length > 0L); }, client.RetryCount.GetValueOrDefault(1), waitDuration.HasValue ? (int)waitDuration.Value.TotalMilliseconds : 0)) { throw new DownloadException(string.Empty) { RemoteUrl = fileUrl, LocalPath = localPath }; } ; } catch (Exception ex) { throw new DownloadException(string.Empty, ex) { RemoteUrl = fileUrl, LocalPath = localPath }; } }
/// <summary> /// 登录 /// </summary> /// <param name="param"></param> /// <returns></returns> public SSOIdentity SignIn(SignInParameter param) { if (param.Password.Length < 32) { param.Password = CryptoManaged.MD5Hex(param.Password); } using (var context = base.CreateUserContext()) { var q = from t in context.Accounts where t.AppID == param.AppID && t.UserName == param.UserName && t.Password == param.Password select new SSOIdentity { UserID = t.RowID, UserName = t.UserName, Token = Guid.NewGuid().ToString("N"), IssueDate = DateTime.Now, IsAuthenticated = true }; var result = q.DefaultIfEmpty(new SSOIdentity() { UserName = param.UserName, IsAuthenticated = false }).Single(); if (param.LogSignIn) { var log = new SignInLog(); log.UserName = param.UserName; log.ClientIP = param.ClientIP; log.Platform = param.Platform; log.SignInDate = DateTime.Now; log.IsSuccess = result.IsAuthenticated; context.SignInLogs.Add(log); context.SaveChanges(); } return(result); } }
public static void UploadFile(HttpContext context, string savePath) { HttpRequest Request = context.Request; HttpResponse Response = context.Response; var httpFile = Request.Files[0]; if (httpFile == null) { Response.StatusCode = 400; //Bad Request Response.End(); } string rangeFilename = CryptoManaged.MD5Hex(httpFile.FileName + httpFile.ContentLength); var file = new FileInfo(Path.Combine(Path.GetDirectoryName(savePath), rangeFilename)); Response.AddHeader("Content-Length", (file.Exists ? file.Length : 0L).ToString()); long offset; if (!long.TryParse(Request.Headers["Range"], out offset) || file.Length != offset) { Response.StatusCode = 416; //Requested range not satisfiable Response.End(); } using (var stream = file.Open(file.Exists ? FileMode.Append : FileMode.CreateNew, FileAccess.Write, FileShare.Write)) { int length = httpFile.ContentLength; Response.AddHeader("Content-Range", "bytes " + offset.ToString() + "-" + length.ToString() + "/" + length.ToString()); Response.StatusCode = 206; stream.Position = offset; httpFile.InputStream.FixedCopyTo(stream, length, per => { stream.Flush(); return(Response.IsClientConnected); }); } Response.End(); }
public SSOIdentity OAuth(OAuthParameter param) { int kind = EnumToValue(param.OAuthKind); using (var context = base.CreateUserContext()) { var q = from t in context.OpenOAuths where t.OpenID == param.OpenID && t.OAuthKind == kind select t; var entity = q.SingleOrDefault(); Guid userID = Guid.Empty; // 验证OAuth返回 if (string.IsNullOrEmpty(param.UserName)) { if (entity == null) { return(null); } var q2 = from t in context.Accounts join t2 in context.OpenOAuths on t.RowID equals t2.UserID where t2.OpenID == param.OpenID && t2.OAuthKind == kind select new string[] { t.UserName, t.Password }; var args = q2.SingleOrDefault(); if (args == null) { throw new InvalidInvokeException("用户不存在"); } param.UserName = args[0]; param.Password = args[1]; } else { // 没有帐号,绑定新帐号 if (param.UserName == param.OpenID) { param.UserName = CreateNewUserName(param.OpenID, param.OAuthKind); if (!context.Accounts.Any(t => t.AppID == param.AppID && t.UserName == param.UserName)) { this.SignUp(new SignUpParameter() { AppID = param.AppID, UserName = param.UserName, Password = param.Password }); Thread.Sleep(200); } goto signIn; } param.Password = CryptoManaged.MD5Hex(param.Password); var q2 = from t in context.Accounts where t.AppID == param.AppID && t.UserName == param.UserName && t.Password == param.Password select t.RowID; userID = q2.SingleOrDefault(); if (userID == Guid.Empty) { throw new InvalidInvokeException("帐号或密码错误"); } var q3 = from t in context.OpenOAuths where t.UserID == userID && t.OAuthKind == kind select t; if (q3.Any()) { throw new InvalidInvokeException("已经绑定过其它账户"); } } signIn: var id = this.SignIn(param); if (entity == null) { if (id.IsAuthenticated) { userID = id.UserID; } if (userID == Guid.Empty) { throw new InvalidInvokeException("UserID's null"); } entity = new OpenOAuth(); EntityMapper.Map <OAuthParameter, OpenOAuth>(param, entity); entity.UserID = userID; entity.CreateDate = DateTime.Now; context.OpenOAuths.Add(entity); context.SaveChanges(); } return(id); } }
internal string HexPassword(string password) { return(CryptoManaged.MD5Hex(password)); }