using FastReport.Forms; using FastReport.Utils; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace FastReport.Auth { /// /// Form for showing personalization information /// public partial class AuthFormOptions : DesignerOptionsPage { #region Private Fields private string expiresFormat; #endregion Private Fields #region Public Constructors /// /// Default constructor /// public AuthFormOptions() { InitializeComponent(); Localize(); AuthService.Instance.Refresh(); UpdateInfo(); RTL(); comboBoxServerServer.SelectedIndex = 0; } #endregion Public Constructors #region Private Methods internal void UpdateCaptionFont(int dpi) { float scale = dpi == 0? 1f : dpi / 96f; lbCaption.Font = new Font("Calibri Light", 19.5f * scale ); lbCaptionServer.Font = new Font("Calibri Light", 19.5f * scale ); return; } private void btnSignIn_Click(object sender, EventArgs e) { AuthService.Instance.SignIn(); UpdateInfo(); } private void lbCreateOne_Click(object sender, EventArgs e) { ProcessHelper.StartProcess("https://id.fast-report.com/"); } private void lbManage_Click(object sender, EventArgs e) { ProcessHelper.StartProcess("https://id.fast-report.com/"); } private void lbSignOut_Click(object sender, EventArgs e) { AuthService.Instance.SignOut(); UpdateInfo(); } private void lbUpdate_Click(object sender, EventArgs e) { AuthService.Instance.SignIn(); UpdateInfo(); } // //server private void comboBoxServerServer_SelectedValueChanged(object sender, EventArgs e) { var comboBox = sender as ComboBox; var value = comboBox.SelectedItem as string; if (value == Res.Get("Forms,ServerWindow,comboBoxServer")) // pre-written server { textBoxCustomHostServer.Text = Res.Get("Forms,ServerWindow,comboBoxText"); textBoxCustomHostServer.Enabled = false; } else // Custom { textBoxCustomHostServer.Enabled = true; textBoxCustomHostServer.Text = ""; } } private void textBoxCustomHostServer_TextChanged(object sender, EventArgs e) { var textBox = sender as TextBox; if (!textBox.Enabled) return; var requestHost = textBox.Text; if (string.IsNullOrEmpty(requestHost)) { } else { AuthService.Instance.Settings.BackendHost = requestHost; } } private void textBoxApiKeyServer_TextChanged(object sender, EventArgs e) { var textBox = sender as TextBox; var text = textBox.Text; if (text != null) { var apiKey = text.Trim(); if (apiKey != "") AuthService.Instance.User.ApiKey = apiKey; } } private void Localize() { MyRes res = new MyRes("Forms,AccountWindow"); this.Text = res.Get(""); this.lbCaption.Text = res.Get("Title"); this.btnSignIn.Text = res.Get("SignIn"); this.lbNoAccount.Text = res.Get("NoAccount"); this.lbCreateOne.Text = res.Get("Create"); this.lbMessage.Text = res.Get("Intro") + res.Get("Testing"); this.expiresFormat = res.Get("Expires"); this.lbManage.Text = res.Get("Profile"); this.lbSignOut.Text = res.Get("SignOut"); this.lbText.Text = res.Get("Message"); this.lbUpdate.Text = res.Get("SessionExpired"); MyRes res2 = new MyRes("Forms,ServerWindow"); this.label1Server.Text = res2.Get("Server"); this.label2Server.Text = res2.Get("ApiKeyword"); this.lbCaptionServer.Text = res2.Get("Caption"); this.comboBoxServerServer.Items[0] = res2.Get("comboBoxServer"); this.comboBoxServerServer.Items[1] = res2.Get("comboBoxCustom"); this.tab2.Text = res2.Get(""); } private void RightToLeftInternal(Control control) { if (control.HasChildren) { foreach (Control child in control.Controls) { child.Left = control.Width - child.Left - child.Width; RightToLeftInternal(child); } } } private Image RoundCorners(Image fromImage, float cornerRadius, Color backgroundColor) { cornerRadius *= 2; Bitmap result = new Bitmap(fromImage.Width, fromImage.Height); using (Graphics g = Graphics.FromImage(result)) { g.Clear(backgroundColor); g.SmoothingMode = SmoothingMode.AntiAlias; using (Brush brush = new TextureBrush(fromImage)) { using (GraphicsPath gp = new GraphicsPath()) { gp.AddArc(0, 0, cornerRadius, cornerRadius, 180, 90); gp.AddArc(0 + result.Width - cornerRadius - 1, 0, cornerRadius, cornerRadius, 270, 90); gp.AddArc(0 + result.Width - cornerRadius - 1, 0 + result.Height - cornerRadius - 1, cornerRadius, cornerRadius, 0, 90); gp.AddArc(0, 0 + result.Height - cornerRadius, cornerRadius - 1, cornerRadius, 90, 90); g.FillPath(brush, gp); return result; } } } } private void RTL() { if (RightToLeftLayout) { RightToLeftInternal(this); } } private void UpdateInfo() { AuthService auth = AuthService.Instance; if (auth.User.IsAuthenticated) { BeforeSignIn(false); AfterSignIn(true); lbUsername.Text = auth.User.DisplayName; lbEmail.Text = auth.User.DisplayEmail; pbAvatar.Image = RoundCorners(auth.User.DisplayAvatar, 15, Color.Transparent); if (auth.CanRefresh) { if (auth.User.ExpiresIn < DateTime.Now) { lbTime.Visible = false; lbUpdate.Visible = true; } else { lbUpdate.Visible = false; lbTime.Visible = true; lbTime.Text = String.Format(expiresFormat, auth.User.ExpiresIn.ToShortTimeString()); } } } else { this.SuspendLayout(); BeforeSignIn(true); AfterSignIn(false); } } private void BeforeSignIn(bool visible) { this.tab1.SuspendLayout(); lbMessage.Visible = visible; btnSignIn.Visible = visible; lbCreateOne.Visible = visible; lbNoAccount.Visible = visible; this.tab1.PerformLayout(); } private void AfterSignIn(bool visible) { this.tab1.SuspendLayout(); lbUpdate.Visible = visible; lbTime.Visible = visible; pbAvatar.Visible = visible; lbText.Visible = visible; lbSignOut.Visible = visible; lbManage.Visible = visible; lbUsername.Visible = visible; lbEmail.Visible = visible; tab1.ResumeLayout(true); } #endregion Private Methods } }