Esempio n. 1
0
 /// <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))));
 }
Esempio n. 2
0
 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)));
 }
Esempio n. 3
0
        /// <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());
            }
        }
Esempio n. 6
0
        /// <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));
            }
        }
Esempio n. 8
0
 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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 12
0
        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);
            }
        }
Esempio n. 13
0
        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"));
        }
Esempio n. 15
0
        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()));
        }
Esempio n. 17
0
        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);
     }
 }
Esempio n. 20
0
        /// <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)));
        }
Esempio n. 21
0
        /// <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);
            }
        }