Files
BeWoPlaner/BeWoPlanerMobil/Controllers/LoginController.cs
2020-08-31 17:44:05 +02:00

119 lines
4.1 KiB
C#

using System;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.DataContracts;
using HttpCookie = System.Web.HttpCookie;
namespace BeWoPlanerMobil.Controllers
{
public class LoginController : AbstractBaseController
{
public static string LoginErrorIndex => "LoginErrorIndex";
[HttpPost]
public ActionResult Index()
{
ViewData[LoginErrorIndex] = string.Empty;
TempData[LoginErrorIndex] = string.Empty;
if (MobileSessionFacade.IsUserLoggedIn() && !Request.Browser.Browser.Equals("InternetExplorer"))
{
var loginState = MobileUtils.GetLoginState(MobileSessionFacade.Tenant);
if (loginState.Message != null && loginState.State > -1)
{
TempData[MobileUtils.TempDataLoginStateKey] = loginState;
}
Log.Info($"LoginController.Index(): Loggedin User: {MobileSessionFacade.LoggedInUser.LoginName}");
if (!MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecordView_View))) &&
!MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ViewAll))))
{
ViewData[LoginErrorIndex] = HttpUtility.HtmlDecode("Sie haben keine ausreichenden Berechtigungen, um die Zeiterfassung anzeigen zu lassen.");
MobileSessionFacade.LogUserOut();
FormsAuthentication.SignOut();
return View("Index");
}
FormsAuthentication.SetAuthCookie(MobileSessionFacade.LoggedInUser.LoginName, true);
ViewData[LoginErrorIndex] = string.Empty;
var keks = new HttpCookie("tenantKeks") { Value = MobileSessionFacade.Tenant, Expires = DateTime.Now.AddDays(1) };
HttpContext.Response.SetCookie(keks);
var brauser = Request.Browser;
var brauserInfoDC = new BeWoMobilBrowserInfoDC
{
Type = brauser.Type,
Name = brauser.Browser,
BrowserVersion = brauser.Version,
Platform = brauser.Platform,
Tenant = MobileSessionFacade.Tenant
};
//OperationsService.InsertBeWoMobilBrowserInfo(brauserInfoDC);
AbstractModel.TimeOfLastAction = $"{DateTime.Now:yyyy-MM-dd}T{DateTime.Now:HH:mm:ss}";
return RedirectToActionPermanent("Main", "Main");
}
if(MobileSessionFacade.IsUserLoggedIn() && Request.Browser.Browser.Equals("InternetExplorer"))
{
MobileSessionFacade.LogUserOut();
FormsAuthentication.SignOut();
}
Log.Info($"LoginController.Index(): Login failed! Tenant = {MobileSessionFacade.Tenant}");
ViewData[LoginErrorIndex] = Request.Browser.Browser.Equals("InternetExplorer") ?
"Dieser Browser ist nicht mit dem mobilen BeWoPlaner komptatibel. Bitte benutzen Sie einen anderen Browser als den Internet Explorer." :
"Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie Benutzername und Passwort.";
return View("Index");
}
public ActionResult Index(string tenant, string returnUrl)
{
if (returnUrl != null)
{
return RedirectToAction("Index", new {tenant = MobileSessionFacade.Tenant});
}
var queryString = HttpContext.Request.QueryString;
if(queryString != null && queryString.HasKeys() && queryString.AllKeys.Contains("isSessionTimedOut"))
{
ViewData[IsSessionTimedOut] = "Sie wurden automatisch abgemeldet, da Ihre Session abgelaufen ist.";
}
if (tenant == null)
{
var keks = HttpContext.Request.Cookies.Get("tenantKeks");
if(keks != null)
{
tenant = keks.Value;
}
}
if (MobileSessionFacade.IsUserLoggedIn())
{
return RedirectToActionPermanent("Main", "Main");
}
MobileSessionFacade.Tenant = tenant;
return View("Index");
}
}
}