using System; using System.Linq; using Nancy; using Nancy.Security; using Sony.Filtr.Contracts.Abstractions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Utility.Logging; namespace Sony.Filtr.AdminAPI.Modules { public class BaseModule : NancyModule { public BaseModule(IApplicationInstanceManager applicationInstanceManager, ILogger logger = null) { Logger = logger ?? new NullLogger(); this.RequiresAuthentication(); Before.AddItemToEndOfPipeline(delegate(NancyContext context) { string countryCode = (string)context.Parameters.countryCode; if (string.IsNullOrWhiteSpace(countryCode)) return null; var apps = applicationInstanceManager.GetApplications(); Application app; if (countryCode.Equals("global", StringComparison.InvariantCultureIgnoreCase)) { app = applicationInstanceManager.GetGlobalPushApplication(); } else if (countryCode.Equals("other", StringComparison.InvariantCultureIgnoreCase)) { app = applicationInstanceManager.GetFallbackApplication(); } else { app = apps.FirstOrDefault(a=> a.SpotifyRegionCode.Equals(countryCode, StringComparison.InvariantCultureIgnoreCase)); } if (app == null) { int applicationId; if (int.TryParse(countryCode, out applicationId)) { app = apps.FirstOrDefault(a => a.ID == applicationId); } } _currentApplication = app; return null; }); } private Application _currentApplication; protected Application CurrentApplication { get { return _currentApplication; } } public ILogger Logger { get; } protected string ExtractRequestData(Nancy.Request request) { string data = "Not presented"; if (request != null) { data = $"{request.Method} {request.Url} {request.ProtocolVersion}"; } return data; } } }