/// <summary> /// Fixed: /// </summary> public static HtmlBuilder TenantImageSettingsEditor(this HtmlBuilder hb, Context context, TenantModel tenantModel) { return(hb.FieldSet( id: "TenantImageSettingsEditor", css: " enclosed", legendText: Displays.LogoImage(context: context), action: () => hb .FieldTextBox( textType: HtmlTypes.TextTypes.File, controlId: "TenantImage", fieldCss: "field-auto-thin", controlCss: " w400", labelText: Displays.File(context: context)) .Button( controlId: "SetTenantImage", controlCss: "button-icon", text: Displays.Upload(context: context), onClick: "$p.uploadTenantImage($(this));", icon: "ui-icon-disk", action: "binaries/updatetenantimage", method: "post") .Button( controlCss: "button-icon", text: Displays.Delete(context: context), onClick: "$p.send($(this));", icon: "ui-icon-trash", action: "binaries/deletetenantimage", method: "delete", confirm: "ConfirmDelete", _using: BinaryUtilities.ExistsTenantImage( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context), referenceId: tenantModel.TenantId, sizeType: Libraries.Images.ImageData.SizeTypes.Logo)))); }
public static string EditorNew(Context context, SiteSettings ss) { return(Editor(context: context, ss: ss, tenantModel: new TenantModel( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), methodType: BaseModel.MethodTypes.New))); }
/// <summary> /// Fixed: /// </summary> public static string Editor( Context context, SiteSettings ss, int tenantId, bool clearSessions) { var tenantModel = new TenantModel( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), tenantId: tenantId, clearSessions: clearSessions, methodType: BaseModel.MethodTypes.Edit); if (tenantModel.AccessStatus != Databases.AccessStatuses.Selected) { Rds.ExecuteNonQuery( context: context, connectionString: Parameters.Rds.OwnerConnectionString, statements: new[] { Rds.IdentityInsertTenants(on: true), Rds.InsertTenants( param: Rds.TenantsParam() .TenantId(tenantId) .TenantName("DefaultTenant")), Rds.IdentityInsertTenants(on: false) }); tenantModel.Get(context, ss); } tenantModel.SwitchTargets = GetSwitchTargets( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), tenantId: tenantId); return(Editor(context: context, ss: ss, tenantModel: tenantModel)); }
public static HtmlBuilder HeaderLogo(this HtmlBuilder hb, IContext context) { var ss = SiteSettingsUtilities.TenantsSiteSettings(context); var existsImage = BinaryUtilities.ExistsTenantImage( context: context, ss: ss, referenceId: context.TenantId, sizeType: Images.ImageData.SizeTypes.Logo); var title = Title(context: context); return(hb.H(number: 2, id: "Logo", action: () => hb .A( attributes: new HtmlAttributes().Href(context.Publish ? Locations.ItemIndex( context: context, id: context.SiteId) : Locations.Top(context: context)), action: () => hb .LogoImage( context: context, showTitle: !title.IsNullOrEmpty(), existsTenantImage: existsImage) .Span(id: "ProductLogo", action: () => hb .Text(text: title))))); }
/// <summary> /// Fixed: /// </summary> public static string DeleteTenantImage(Context context, TenantModel tenantModel) { var ss = SiteSettingsUtilities.TenantsSiteSettings(context); var invalid = BinaryValidators.OnDeletingTenantImage( context: context, ss: ss); switch (invalid) { case Error.Types.None: break; default: return(invalid.MessageJson(context: context)); } var error = new BinaryModel(tenantModel.TenantId) .DeleteTenantImage(context: context); if (error.Has()) { return(error.MessageJson(context: context)); } else { return(new ResponseCollection() .ReplaceAll( "#Logo", new HtmlBuilder().HeaderLogo( context: context)) .ReplaceAll( "#TenantImageSettingsEditor", new HtmlBuilder().TenantImageSettingsEditor( context: context, tenantModel: tenantModel)) .Message(Messages.FileDeleteCompleted(context: context)) .ToJson()); } }
/// <summary> /// Fixed: /// </summary> public static (byte[] bytes, string contentType) TenantImageLogo(Context context, TenantModel tenantModel) { var ss = SiteSettingsUtilities.TenantsSiteSettings(context); var invalid = BinaryValidators.OnGetting( context: context, ss: ss); switch (invalid.Type) { case Error.Types.None: break; default: return(null, null); } var binaryModel = new BinaryModel( context: context, referenceId: tenantModel.TenantId, binaryType: "TenantImage"); return( binaryModel.TenantImage( context: context, sizeType: Libraries.Images.ImageData.SizeTypes.Logo, column: Rds.BinariesColumn().Bin()), binaryModel.ContentType.IsNullOrEmpty() ? "image/bmp" : binaryModel.ContentType); }
public ActionResult Edit() { var context = new Context(); if (!Request.IsAjaxRequest()) { var log = new SysLogModel(context: context); var html = TenantUtilities.Editor( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), tenantId: context.TenantId, clearSessions: true); ViewBag.HtmlBody = html; log.Finish(context: context, responseSize: html.Length); return(View()); } else { var log = new SysLogModel(context: context); var json = TenantUtilities.EditorJson( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), tenantId: context.TenantId); log.Finish(context: context, responseSize: json.Length); return(Content(json)); } }
private static HtmlBuilder LogoImage( this HtmlBuilder hb, Context context, bool showTitle, bool existsTenantImage) { return(existsTenantImage && !context.Publish ? hb.Img( id: "CorpLogo", src: Locations.Get( context: context, parts: new string[] { "Binaries", "TenantImageLogo", BinaryUtilities.TenantImagePrefix( context, SiteSettingsUtilities.TenantsSiteSettings(context), context.TenantId, Images.ImageData.SizeTypes.Logo) })) : hb.Img( id: "CorpLogo", src: Locations.Images( context: context, parts: showTitle ? "logo-corp.png" : "logo-corp-with-title.png"))); }
public string Update(Context context) { var log = new SysLogModel(context: context); var json = TenantUtilities.Update( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), tenantId: context.TenantId); log.Finish(context: context, responseSize: json.Length); return(json); }
public string DeleteTenantImage(IContext context) { var ss = SiteSettingsUtilities.TenantsSiteSettings(context); var tenantModel = new TenantModel(context, ss).Get(context, ss); var log = new SysLogModel(context: context); var json = BinaryUtilities.DeleteTenantImage( context: context, tenantModel: tenantModel); log.Finish(context: context); return(json); }
public string UpdateTenantImage(Context context, IHttpPostedFile[] file) { var ss = SiteSettingsUtilities.TenantsSiteSettings(context); var tenantModel = new TenantModel(context, ss).Get(context, ss); var log = new SysLogModel(context: context); var json = BinaryUtilities.UpdateTenantImage( context: context, tenantModel: tenantModel); log.Finish(context: context); return(json); }
public static void RegisterSamlConfiguration() { if (Parameters.Authentication.Provider != "SAML") { return; } var context = new Context(request: false, sessionStatus: false, sessionData: false, user: false); foreach (var tenant in new TenantCollection(context, SiteSettingsUtilities.TenantsSiteSettings(context))) { SetIdpConfiguration(context, tenant.TenantId, true); } }
public FileContentResult TenantImageLogo(Context context) { var log = new SysLogModel(context: context); var(bytes, contentType) = BinaryUtilities.TenantImageLogo( context: context, tenantModel: new TenantModel( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context))); log.Finish( context: context, responseSize: bytes.Length); return(new FileContentResult(bytes, contentType)); }
public ActionResult TenantImageLogo() { var context = new Context(); var log = new SysLogModel(context: context); var bytes = BinaryUtilities.TenantImageLogo( context: context, tenantModel: new TenantModel( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context))); log.Finish( context: context, responseSize: bytes.Length); return(new FileContentResult(bytes, "image/png")); }
public static void RegisterSamlConfiguration() { if (Parameters.Authentication.Provider != "SAML-MultiTenant") { return; } var context = new Context(request: false, sessionStatus: false, sessionData: false, user: false); foreach (var tenant in new TenantCollection(context, SiteSettingsUtilities.TenantsSiteSettings(context), where: Rds.TenantsWhere() .Comments(_operator: " is not null") .Comments("", _operator:"<>"))) { SetIdpConfiguration(context, tenant.TenantId, true); new SysLogModel(context, "SetIdpConfiguration:" + "[" + tenant.TenantId + "]" + tenant.Title); } }
/// <summary> /// Fixed: /// </summary> public static byte[] TenantImageLogo(Context context, TenantModel tenantModel) { var ss = SiteSettingsUtilities.TenantsSiteSettings(context); var invalid = BinaryValidators.OnGetting( context: context, ss: ss); switch (invalid.Type) { case Error.Types.None: break; default: return(null); } return(new BinaryModel(tenantModel.TenantId).TenantImage( context: context, sizeType: Libraries.Images.ImageData.SizeTypes.Logo, column: Rds.BinariesColumn().Bin())); }
public ActionResult Login(string returnUrl, string ssocode = "") { var context = new Context(); var log = new SysLogModel(context: context); if ((Parameters.Authentication.Provider == "SAML-MultiTenant") && (ssocode != string.Empty)) { var tenant = new TenantModel().Get( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context), where : Rds.TenantsWhere().Comments(ssocode)); if (tenant.AccessStatus == Databases.AccessStatuses.Selected) { Authentications.SignOut(context: context); var redirectUrl = Saml.SetIdpConfiguration(context, tenant.TenantId); if (redirectUrl != null) { return(new RedirectResult(redirectUrl)); } } return(new RedirectResult(Locations.InvalidSsoCode(context))); } if (context.Authenticated) { if (context.QueryStrings.Bool("new")) { Authentications.SignOut(context: context); } log.Finish(context: context); return(base.Redirect(Url.IsLocalUrl(returnUrl) ? returnUrl : Locations.Top(context: context))); } var html = UserUtilities.HtmlLogin( context: context, returnUrl: Url.IsLocalUrl(returnUrl) ? returnUrl : "", message: Request.QueryString["expired"] == "1" && !Request.IsAjaxRequest() ? Messages.Expired(context: context).Text : string.Empty); ViewBag.HtmlBody = html; log.Finish(context: context, responseSize: html.Length); return(View()); }
/// <summary> /// Fixed: /// </summary> public (string redirectUrl, string redirectResultUrl, string html) Login( Context context, string returnUrl, bool isLocalUrl, string ssocode = "") { var log = new SysLogModel(context: context); if (context.Authenticated) { if (context.QueryStrings.Bool("new")) { Authentications.SignOut(context: context); } log.Finish(context: context); return(isLocalUrl ? returnUrl : Locations.Top(context: context), null, null); } if ((Parameters.Authentication.Provider == "SAML-MultiTenant") && (ssocode != string.Empty)) { var tenant = new TenantModel().Get( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context), where : Rds.TenantsWhere().Comments(ssocode)); if (tenant.AccessStatus == Databases.AccessStatuses.Selected) { var redirectUrl = Saml.SetIdpConfiguration(context, tenant.TenantId); if (redirectUrl != null) { return(null, redirectUrl, null); } } return(null, Locations.InvalidSsoCode(context), null); } var html = UserUtilities.HtmlLogin( context: context, returnUrl: isLocalUrl ? returnUrl : string.Empty, message: context.QueryStrings.ContainsKey("expired") && context.QueryStrings["expired"] == "1" && !context.Ajax ? Messages.Expired(context: context).Text : string.Empty); log.Finish(context: context, responseSize: html.Length); return(null, null, html); }
public string Edit(Context context) { if (!context.Ajax) { var log = new SysLogModel(context: context); var html = TenantUtilities.Editor( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), tenantId: context.TenantId, clearSessions: true); log.Finish(context: context, responseSize: html.Length); return(html); } else { var log = new SysLogModel(context: context); var json = TenantUtilities.EditorJson( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context: context), tenantId: context.TenantId); log.Finish(context: context, responseSize: json.Length); return(json); } }
/// <summary> /// Fixed: /// </summary> public ActionResult SamlLogin() { var context = new Context(); if (HttpContext.User?.Identity?.AuthenticationType == "Federation" && HttpContext.User?.Identity?.IsAuthenticated == true) { Authentications.SignOut(); var loginId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier); var firstName = string.Empty; var lastName = string.Empty; var tenantManager = false; foreach (var claim in ClaimsPrincipal.Current.Claims) { switch (claim.Type) { case "FirstName": firstName = claim.Value; break; case "LastName": lastName = claim.Value; break; case "TenantManager": tenantManager = claim.Value.ToLower() == "true" ? true : false; break; } } var space = (string.IsNullOrEmpty(lastName) || string.IsNullOrEmpty(firstName)) ? string.Empty : " "; var name = lastName + space + firstName; if (name == string.Empty) { return(new RedirectResult(Locations.EmptyUserName(context: context))); } var ssocode = loginId.Issuer.TrimEnd('/').Substring(loginId.Issuer.TrimEnd('/').LastIndexOf('/') + 1); var tenant = new TenantModel().Get( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context), where : Rds.TenantsWhere().Comments(ssocode)); try { Saml.UpdateOrInsert( context: context, tenantId: tenant.TenantId, loginId: loginId.Value, name: name, mailAddress: loginId.Value, tenantManager: tenantManager, synchronizedTime: System.DateTime.Now); } catch (System.Data.SqlClient.SqlException e) { if (e.Number == 2601) { return(new RedirectResult(Locations.LoginIdAlreadyUse(context: context))); } throw; } var user = new UserModel().Get( context: context, ss: null, where : Rds.UsersWhere() .TenantId(tenant.TenantId) .LoginId(loginId.Value)); if (user.AccessStatus == Databases.AccessStatuses.Selected) { if (user.Disabled) { return(new RedirectResult(Locations.UserDisabled(context: context))); } if (user.Lockout) { return(new RedirectResult(Locations.UserLockout(context: context))); } user.Allow(context: context, returnUrl: Locations.Top(context), createPersistentCookie: true); return(new RedirectResult(Locations.Top(context))); } else { return(new RedirectResult(Locations.SamlLoginFailed(context: context))); } } return(new RedirectResult(Locations.SamlLoginFailed(context: context))); }
/// <summary> /// Fixed: /// </summary> public (string redirectUrl, string redirectResultUrl, string html) SamlLogin(Context context) { if (!Authentications.SAML() || context.AuthenticationType != "Federation" || context.IsAuthenticated != true) { return(null, Locations.SamlLoginFailed(context: context), null); } Authentications.SignOut(context: context); var loginId = context.UserClaims?.FirstOrDefault(claim => claim.Type == ClaimTypes.NameIdentifier); var attributes = Saml.MapAttributes(context.UserClaims, loginId.Value); var name = attributes.UserName; TenantModel tenant; if (Parameters.Authentication.Provider == "SAML-MultiTenant") { if (string.IsNullOrEmpty(name)) { return(null, Locations.EmptyUserName(context: context), null); } var ssocode = loginId.Issuer.TrimEnd('/').Substring(loginId.Issuer.TrimEnd('/').LastIndexOf('/') + 1); tenant = new TenantModel().Get( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context), where : Rds.TenantsWhere().Comments(ssocode)); } else { tenant = new TenantModel().Get( context: context, ss: SiteSettingsUtilities.TenantsSiteSettings(context), where : Rds.TenantsWhere().TenantId(Parameters.Authentication.SamlParameters.SamlTenantId)); if (tenant.AccessStatus != Databases.AccessStatuses.Selected) { Rds.ExecuteNonQuery( context: context, connectionString: Parameters.Rds.OwnerConnectionString, statements: new[] { Rds.IdentityInsertTenants(factory: context, on: true), Rds.InsertTenants( param: Rds.TenantsParam() .TenantId(Parameters.Authentication.SamlParameters.SamlTenantId) .TenantName("DefaultTenant")), Rds.IdentityInsertTenants(factory: context, on: false) }); tenant.TenantId = Parameters.Authentication.SamlParameters.SamlTenantId; } } try { Saml.UpdateOrInsert( context: context, tenantId: tenant.TenantId, loginId: loginId.Value, name: string.IsNullOrEmpty(name) ? loginId.Value : name, mailAddress: attributes["MailAddress"], synchronizedTime: System.DateTime.Now, attributes: attributes); } catch (DbException e) { if (context.SqlErrors.ErrorCode(e) == 2601) { return(null, Locations.LoginIdAlreadyUse(context: context), null); } throw; } var user = new UserModel().Get( context: context, ss: null, where : Rds.UsersWhere() .TenantId(tenant.TenantId) .LoginId(loginId.Value)); if (user.AccessStatus == Databases.AccessStatuses.Selected) { if (user.Disabled) { return(null, Locations.UserDisabled(context: context), null); } if (user.Lockout) { return(null, Locations.UserLockout(context: context), null); } user.Allow(context: context, returnUrl: Locations.Top(context), createPersistentCookie: true); return(null, Locations.Top(context), null); } else { return(null, Locations.SamlLoginFailed(context: context), null); } }