/// <summary> /// Gets Ldap details into the fields /// </summary> /// <returns>The name of the host node.</returns> private void GetLdapDetails() { iFolderServer server = web.GetServer(ServerID); remoteweb.PreAuthenticate = true; remoteweb.Credentials = web.Credentials; remoteweb.Url = server.PublicUrl + "/iFolderAdmin.asmx"; remoteweb.GetAuthenticatedUser(); server = remoteweb.GetServer(ServerID); //Pick information from IdentityProvider LdapInfo ldapInfo = remoteweb.GetLdapDetails(); LdapServer.Text = ldapInfo.Host; LdapSearchContext.Text = ldapInfo.SearchContexts; LdapProxyUser.Text = ldapInfo.ProxyDN; LdapProxyUserPwd.Text = ldapInfo.ProxyPassword; ConfirmLdapProxyUserPwd.Text = ldapInfo.ProxyPassword; string [] options = new string[2]; options[0] = GetString("YES"); options[1] = GetString("NO"); LdapSslList.DataSource = options; LdapSslList.DataBind(); LdapSslList.SelectedValue = ldapInfo.SSL ? GetString("YES") : GetString("NO"); }
/// <summary> /// Event handler that gets called when the Add DataPath button is clicked. /// </summary> /// <param name="source"></param> /// <param name="e"></param> protected void OnAddDataPathButton_Click(object source, EventArgs e) { if (!ValidPage) { TopNav.ShowError(GetString("ALLFIELDSREQUIRED")); } else { iFolderServer server = web.GetServer(ServerID); remoteweb.PreAuthenticate = true; remoteweb.Credentials = web.Credentials; remoteweb.Url = server.PublicUrl + "/iFolderAdmin.asmx"; int result = remoteweb.AddDataStore(DataPathName.Text, FullPath.Text, ServerID); switch (result) { case 0: string url = web.TrimUrl(ReferringPage); Page.Response.Redirect(url, true); break; case 1: TopNav.ShowError(GetString("LINKALREADYEXISTS")); break; case 2: TopNav.ShowError(GetString("INVALIDFULLPATH")); break; } } }
/// <summary> /// Do Login /// </summary> /// <param name="username">Username</param> /// <param name="password">Password</param> /// <param name="check">Perform browser checks.</param> private void DoLogin(string username, string password, bool check) { // client information log.Info(Context, "Client Information: {0}, {1}, {2}", username, Context.Request.UserHostName, Context.Request.UserAgent); // expires for new cookies DateTime expires = DateTime.Now + TimeSpan.FromDays(30); // check for cookies if (check) { HttpCookie testCookie = Request.Cookies["test"]; if (testCookie == null) { MessageType.Text = rm.GetString("LOGINERROR"); MessageText.Text = "LOGINNOCOOKIES"; // log access log.Info(Context, "Login Failed: Browser Cookies Disabled"); return; } } // check for running scripts // NOTE: check the value for iChain if (check) { string noscript = Request.Form.Get("noscript"); if ((noscript != null) && (noscript == "true")) { MessageType.Text = rm.GetString("LOGINERROR"); MessageText.Text = "LOGINNOSCRIPT"; // log access log.Info(Context, "Login Failed: Browser Scripts Disabled"); return; } } try { // connection iFolderAdmin web = new iFolderAdmin(); // update web url // always use the original path from the WSDL file string simiasUrl = Environment.GetEnvironmentVariable("SimiasUrl"); if (simiasUrl == null) { simiasUrl = System.Configuration.ConfigurationSettings.AppSettings.Get("SimiasUrl"); } UriBuilder webUrl = new UriBuilder(simiasUrl); webUrl.Path = (new Uri(web.Url)).PathAndQuery; web.Url = webUrl.Uri.ToString(); UTF8Encoding utf8Name = new UTF8Encoding(); byte[] encodedCredsByteArray = utf8Name.GetBytes(username); string iFolderUserBase64 = Convert.ToBase64String(encodedCredsByteArray); encodedCredsByteArray = utf8Name.GetBytes(password); string iFolderPassBase64 = Convert.ToBase64String(encodedCredsByteArray); // credentials web.PreAuthenticate = true; web.Credentials = new NetworkCredential(iFolderUserBase64, iFolderPassBase64); // in only one path this value will persist, that is when language cookie is null Session["Language"] = "en"; string code = Session["Language"] as string; // ui language if (LanguageList.SelectedValue == null || LanguageList.SelectedValue == String.Empty) { /// Case when single sign on happens without the login page so no language selected if ((Request.UserLanguages != null) && (Request.UserLanguages.Length > 0)) { code = Request.UserLanguages[0]; if (!(code.StartsWith("zh") || code.StartsWith("pt"))) { code = code.Substring(0, 2); } else { // On Single sign-on Browser sends language as zh-cn,zh-tw and pt-br . // Help files are placed in a folder with names zh-CN,zh-TW and pt-BR . if (code == "zh-cn") { code = "zh-CN"; } else if (code == "zh-tw") { code = "zh-TW"; } else if (code == "pt-br") { code = "pt-BR"; } } Session["Language"] = code; } } else { /// Normal login so select from the list Session["Language"] = LanguageList.SelectedValue; code = Session["Language"] as string; } Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(code); log.Info(Context, "Current culture :{0}", Thread.CurrentThread.CurrentUICulture.Name); // user and system iFolderUser user = null; try { user = web.GetAuthenticatedUser(); } catch (Exception ex) { throw ex; } string multibyteserver = web.GetServerStatus(); iFolderSystem system = web.GetSystem(); Session["System"] = system.Name; iFolderServer server = web.GetHomeServer(); Session["Version"] = server.Version; if (multibyteserver == "no") { web.PreAuthenticate = true; web.Credentials = new NetworkCredential(username, password); } // cookies web.CookieContainer = new CookieContainer(); encodedCredsByteArray = utf8Name.GetBytes(user.UserName); iFolderUserBase64 = Convert.ToBase64String(encodedCredsByteArray); // new username cookie for 30 days Response.Cookies["username"].Value = multibyteserver == "no" ? user.UserName : iFolderUserBase64; Response.Cookies["username"].Expires = expires; Response.Cookies["username"].Path = "/admin/"; // session Session["Connection"] = web; Session["Name"] = user.FullName; Session["UserID"] = user.ID; // add server information to the session. Session["HostName"] = server.HostName; Session["MachineName"] = server.MachineName; Session["OSVersion"] = server.OSVersion; Session["ClrVersion"] = server.ClrVersion; // new language cookie for 30 days Response.Cookies["language"].Value = code; Response.Cookies["language"].Expires = expires; Response.Cookies["language"].Path = "/admin/"; // log access log.Info(Context, "Login Successful"); // redirect FormsAuthentication.RedirectFromLoginPage(user.UserName, false); } catch (WebException ex) { // log access log.Info(Context, ex, "Login Failed"); if (!HandleException(ex)) { throw; } } catch (Exception ex) { // log access log.Info(Context, ex, "Login Failed"); throw ex; } }
/// <summary> /// Do Login /// </summary> /// <param name="username">Username</param> /// <param name="password">Password</param> /// <param name="check">Perform browser checks.</param> private void DoLogin(string username, string password, bool check) { // client information log.Info(Context, "Client Information: {0}, {1}, {2}", username, Context.Request.UserHostName, Context.Request.UserAgent); // expires for new cookies DateTime expires = DateTime.Now + TimeSpan.FromDays(30); // check for cookies if (check) { HttpCookie testCookie = Request.Cookies["test"]; if (testCookie == null) { Message.Text = "LOGIN.NOCOOKIES"; // log access log.Info(Context, "Login Failed: Browser Cookies Disabled"); return; } } // check for running scripts // NOTE: check the value for iChain if (check) { string noscript = Request.Form.Get("noscript"); if ((noscript != null) && (noscript == "true")) { Message.Text = "LOGIN.NOSCRIPT"; // log access log.Info(Context, "Login Failed: Browser Scripts Disabled"); return; } } try { // connection iFolderWeb weblogin = new iFolderWeb(); // update web url // always use the original path from the WSDL file string url = Environment.GetEnvironmentVariable("SimiasUrl"); if (url == null) { url = System.Configuration.ConfigurationSettings.AppSettings.Get("SimiasUrl"); } #if TESTING url = "http://localhost:8086"; #endif UriBuilder loginUrl = new UriBuilder(url); loginUrl.Path = (new Uri(weblogin.Url)).PathAndQuery; weblogin.Url = loginUrl.Uri.ToString(); UTF8Encoding utf8Name = new UTF8Encoding(); byte[] encodedCredsByteArray = utf8Name.GetBytes(username); string iFolderUserBase64 = Convert.ToBase64String(encodedCredsByteArray); encodedCredsByteArray = utf8Name.GetBytes(password); string iFolderPassBase64 = Convert.ToBase64String(encodedCredsByteArray); // credentials weblogin.PreAuthenticate = true; weblogin.Credentials = new NetworkCredential(iFolderUserBase64, iFolderPassBase64); // cookies weblogin.CookieContainer = new CookieContainer(); //Initial Login iFolderUser loginuser = null;; try { loginuser = weblogin.GetAuthenticatedUser(); } catch (WebException ex) { log.Info(Context, ex, "Login Failed"); string ccode = LanguageList.SelectedValue == null ? "en" : LanguageList.SelectedValue; Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(ccode); if (!HandleException(ex)) { throw; } return; } catch (Exception e) { //for now give a general message log.Info(Context, e, "Login Failed"); string ccode = LanguageList.SelectedValue == null ? "en" : LanguageList.SelectedValue; Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(ccode); Message.Text = "LOGIN.UNAUTHORIZED"; return; } url = weblogin.GetHomeServerForUser(loginuser.UserName, password); iFolderWeb web = new iFolderWeb(); UriBuilder webUrl = new UriBuilder(url); webUrl.Path = (new Uri(web.Url)).PathAndQuery; web.Url = webUrl.Uri.ToString(); string multibyteserver = weblogin.GetServerStatus(); // credentials web.PreAuthenticate = true; if (multibyteserver == "no") { web.Credentials = new NetworkCredential(username, password); } else { web.Credentials = new NetworkCredential(iFolderUserBase64, iFolderPassBase64); } // cookies web.CookieContainer = new CookieContainer(); // user, system, and server iFolderUser user = null; try { user = web.GetAuthenticatedUser(); } catch (WebException ex) { log.Info(Context, ex, "Login Failed"); if (!HandleException(ex)) { throw; } return; } catch (Exception e) { //for now give a general message log.Info(Context, e, "Login Failed"); Message.Text = "LOGIN.UNAUTHORIZED"; return; } Session["Connection"] = web; Session["User"] = user; iFolderSystem system = web.GetSystem(); Session["System"] = system; iFolderServer server = web.GetHomeServer(); Session["Server"] = server; encodedCredsByteArray = utf8Name.GetBytes(user.UserName); iFolderUserBase64 = Convert.ToBase64String(encodedCredsByteArray); // new username cookie for 30 days Response.Cookies.Remove("username"); Response.Cookies["username"].Value = (multibyteserver == "no") ? user.UserName : iFolderUserBase64; Response.Cookies["username"].Expires = expires; Response.Cookies["username"].Path = "/ifolder/"; Session["Language"] = "en"; string code = "en"; // ui language if (LanguageList.SelectedValue == null || LanguageList.SelectedValue == String.Empty) { /// Case when single sign on happens without the login page so no language selected if ((Request.UserLanguages != null) && (Request.UserLanguages.Length > 0)) { code = Request.UserLanguages[0]; if (!(code.StartsWith("zh") || code.StartsWith("pt"))) { code = code.Substring(0, 2); } Session["Language"] = code; } } else { /// Normal login so select from the list code = LanguageList.SelectedValue; Session["Language"] = LanguageList.SelectedValue; } // settings WebSettings settings = new WebSettings(web); Session["Settings"] = settings; Response.Cookies["language"].Value = code; Response.Cookies["language"].Expires = expires; Response.Cookies["language"].Path = "/ifolder/"; // log access log.Info(Context, "Login Successful"); // redirect FormsAuthentication.RedirectFromLoginPage(user.UserName, false); } catch (WebException ex) { // log access log.Info(Context, ex, "Login Failed"); if (!HandleException(ex)) { throw; } } catch (Exception ex) { // log access log.Info(Context, ex, "Login Failed"); throw; } }
/// <summary> /// Event handler that gets called when OK button is clicked. /// </summary> /// <param name="source"></param> /// <param name="e"></param> protected void OnOkButton_Click(object source, EventArgs e) { string currentServerProxyDN = null; string currentServerProxyDNPwd = null; bool proxychagnestatus = true; if (!validOK()) { TopNav.ShowError(GetString("ENTERLDAPDETAILS")); return; } if (!DataValidated()) { TopNav.ShowError(GetString("ERRORINVALIDDATA")); return; } if (String.Compare(LdapProxyUserPwd.Text.Trim(), ConfirmLdapProxyUserPwd.Text.Trim()) != 0) { TopNav.ShowError(GetString("ERRORPROXYPASSWORDSDOESNOTMATCH")); return; } /// if ldap admin username and password is right, go ahead iFolderServer server = web.GetServer(ServerID); remoteweb = new iFolderAdmin(); remoteweb.PreAuthenticate = true; remoteweb.Credentials = web.Credentials; remoteweb.Url = server.PublicUrl + "/iFolderAdmin.asmx"; remoteweb.GetAuthenticatedUser(); server = remoteweb.GetServer(ServerID); LdapInfo ldapInfo = new LdapInfo(); ldapInfo.Host = LdapServer.Text.Trim(); ldapInfo.SearchContexts = LdapSearchContext.Text; ldapInfo.ProxyDN = LdapProxyUser.Text; currentServerProxyDN = LdapProxyUser.Text; ldapInfo.ProxyPassword = LdapProxyUserPwd.Text; currentServerProxyDNPwd = LdapProxyUserPwd.Text; ldapInfo.SSL = (LdapSslList.SelectedValue == GetString("YES")) ? true : false; try { remoteweb.SetLdapDetails(ldapInfo, LdapAdminName.Text.Trim(), LdapAdminPwd.Text, ServerID); //now the proxy user info changed, check if the same proxy is //used in any other servers. if (ldapInfo.ProxyDN != null && ldapInfo.ProxyPassword != null) { proxychagnestatus = UpdateProxyUserInfo(LdapAdminName.Text.Trim(), LdapAdminPwd.Text, currentServerProxyDN, currentServerProxyDNPwd); } } catch (Exception ex) { TopNav.ShowInfo(String.Format("{0} {1}", GetString("UNABLETOEDITLDAPDETAILS"), ex.Message)); GetLdapDetails(); return; } if (proxychagnestatus != false) { Response.Redirect(String.Format("ServerDetails.aspx?ID={0}", ServerID)); } }
/// <summary> /// Page Load /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Page_Load(object sender, System.EventArgs e) { // localization rm = (ResourceManager)Application["RM"]; // strings ErrorMessage.Text = GetString("ERROR.MESSAGE"); LoginButton.Text = GetString("LOGIN"); // details StringWriter details = new StringWriter(); // message from query string string message = Request.QueryString.Get("Exception"); if ((message != null) && (message.Length != 0)) { details.WriteLine("Message: {0}", message); details.WriteLine(); } // session additions if (Session != null) { // exception Exception ex = (Exception)Session["Exception"]; if (ex != null) { details.WriteLine("Exception Message: {0}", ex.Message); details.WriteLine("Exception Type: {0}", ex.GetType()); details.WriteLine("Exception Site: {0}", ex.TargetSite); details.WriteLine("Exception Source: {0}", ex.Source); details.WriteLine(); details.WriteLine("Exception Stack:"); details.WriteLine(); details.WriteLine(ex); details.WriteLine(); } // user iFolderUser user = (iFolderUser)Session["User"]; if (user != null) { details.WriteLine("Username: {0}", user.UserName); details.WriteLine("User Full Name: {0}", user.FullName); details.WriteLine(); } // system iFolderSystem system = (iFolderSystem)Session["System"]; if (system != null) { details.WriteLine("System iFolder Name: {0}", system.Name); details.WriteLine("System iFolder Version: {0}", system.Version); details.WriteLine(); } // server iFolderServer server = (iFolderServer)Session["Server"]; if (server != null) { details.WriteLine("Server iFolder Version: {0}", server.Version); details.WriteLine("Server CLR Version: {0}", server.ClrVersion); details.WriteLine("Server Host: {0}", server.HostName); details.WriteLine("Server Machine: {0}", server.MachineName); details.WriteLine("Server Operating System: {0}", server.OSVersion); details.WriteLine("Server Username: {0}", server.UserName); details.WriteLine(); } } // details ErrorDetails.Text = details.ToString(); }