public async Task <WebQueryResult> ProcessRequest(string query, CallbackTypeEnum type, string ip, WebAuthUserData data)
        {
            if (!Settings.Config.ModuleContractNotifications)
            {
                return(WebQueryResult.False);
            }

            try
            {
                RunningRequestCount++;
                if (!query.Contains("&state=12"))
                {
                    return(WebQueryResult.False);
                }

                var prms = query.TrimStart('?').Split('&');
                var code = prms[0].Split('=')[1];

                var result = await WebAuthModule.GetCharacterIdFromCode(code,
                                                                        Settings.WebServerModule.CcpAppClientId, Settings.WebServerModule.CcpAppSecret);

                if (result == null)
                {
                    return(WebQueryResult.EsiFailure);
                }

                var characterId   = result[0];
                var numericCharId = Convert.ToInt64(characterId);

                if (string.IsNullOrEmpty(characterId))
                {
                    await LogHelper.LogWarning("Bad or outdated feed request!");

                    var r = WebQueryResult.BadRequestToSystemAuth;
                    r.Message1 = LM.Get("accessDenied");
                    return(r);
                }

                if (!HasAuthAccess(numericCharId))
                {
                    await LogHelper.LogWarning($"Unauthorized feed request from {characterId}");

                    var r = WebQueryResult.BadRequestToSystemAuth;
                    r.Message1 = LM.Get("accessDenied");
                    return(r);
                }

                if (WebGetAuthGroup(numericCharId, out _) == null)
                {
                    await LogHelper.LogWarning("Feed auth group not found!");

                    var r = WebQueryResult.BadRequestToSystemAuth;
                    r.Message1 = LM.Get("accessDenied");
                    return(r);
                }

                //var rChar = await APIHelper.ESIAPI.GetCharacterData(Reason, characterId, true);

                await SQLHelper.InsertOrUpdateTokens("", characterId, "", result[1]);

                await LogHelper.LogInfo($"Mail feed added for character: {characterId}", LogCat.AuthWeb);

                var res = WebQueryResult.ContractsAuthSuccess;
                res.Message1 = LM.Get("mailAuthSuccessHeader");
                res.Message2 = LM.Get("mailAuthSuccessBody");
                res.AddValue("url", ServerPaths.GetFeedSuccessUrl());
                return(res);
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }
            finally
            {
                RunningRequestCount--;
            }

            return(WebQueryResult.False);
        }
Esempio n. 2
0
        private async Task <bool> OnAuthRequest(HttpListenerRequestEventArgs context)
        {
            if (!Settings.Config.ModuleMail)
            {
                return(false);
            }

            var request  = context.Request;
            var response = context.Response;

            try
            {
                RunningRequestCount++;
                var extPort = Settings.WebServerModule.WebExternalPort;
                var port    = Settings.WebServerModule.WebExternalPort;

                if (request.HttpMethod == HttpMethod.Get.ToString())
                {
                    if (request.Url.LocalPath == "/callback" || request.Url.LocalPath == $"{extPort}/callback" ||
                        request.Url.LocalPath == $"{port}/callback")
                    {
                        var clientID = Settings.WebServerModule.CcpAppClientId;
                        var secret   = Settings.WebServerModule.CcpAppSecret;

                        var prms  = request.Url.Query.TrimStart('?').Split('&');
                        var code  = prms[0].Split('=')[1];
                        var state = prms.Length > 1 ? prms[1].Split('=')[1] : null;

                        if (state != "12")
                        {
                            return(false);
                        }

                        //state = 12 && have code
                        var result = await WebAuthModule.GetCharacterIdFromCode(code, clientID, secret);

                        if (result == null)
                        {
                            await WebServerModule.WriteResponce(
                                WebServerModule.GetAccessDeniedPage("Mail Module", LM.Get("accessDenied"),
                                                                    WebServerModule.GetAuthPageUrl()), response);

                            return(true);
                        }

                        var lCharId = Convert.ToInt64(result[0]);

                        var    allowedCharacters = GetAllParsedCharactersWithGroups();
                        string allowedGroup      = null;
                        foreach (var(group, allowedCharacterIds) in allowedCharacters)
                        {
                            if (allowedCharacterIds.Contains(lCharId))
                            {
                                allowedGroup = group;
                                break;
                            }
                        }

                        if (string.IsNullOrEmpty(allowedGroup))
                        {
                            await WebServerModule.WriteResponce(
                                WebServerModule.GetAccessDeniedPage("Mail Module", LM.Get("accessDenied"),
                                                                    WebServerModule.GetAuthPageUrl()), response);

                            return(true);
                        }

                        await SQLHelper.InsertOrUpdateTokens("", result[0], result[1], "");

                        await WebServerModule.WriteResponce(File
                                                            .ReadAllText(SettingsManager.FileTemplateMailAuthSuccess)
                                                            .Replace("{headerContent}", WebServerModule.GetHtmlResourceDefault(false))
                                                            .Replace("{header}", "authTemplateHeader")
                                                            .Replace("{body}", LM.Get("mailAuthSuccessHeader"))
                                                            .Replace("{body2}", LM.Get("mailAuthSuccessBody"))
                                                            .Replace("{backText}", LM.Get("backText")), response
                                                            );

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }
            finally
            {
                RunningRequestCount--;
            }

            return(false);
        }
        private async Task <bool> OnDisplayTimers(HttpListenerRequestEventArgs context)
        {
            if (!Settings.Config.ModuleTimers)
            {
                return(false);
            }

            var request  = context.Request;
            var response = context.Response;

            try
            {
                RunningRequestCount++;
                var extPort = Settings.WebServerModule.WebExternalPort;
                var port    = Settings.WebServerModule.WebExternalPort;

                if (request.HttpMethod == HttpMethod.Get.ToString())
                {
                    if (request.Url.LocalPath == "/callback" || request.Url.LocalPath == $"{extPort}/callback" ||
                        request.Url.LocalPath == $"{port}/callback")
                    {
                        var clientID = Settings.WebServerModule.CcpAppClientId;
                        var secret   = Settings.WebServerModule.CcpAppSecret;

                        var prms  = request.Url.Query.TrimStart('?').Split('&');
                        var code  = prms[0].Split('=')[1];
                        var state = prms.Length > 1 ? prms[1].Split('=')[1] : null;

                        if (state != "11")
                        {
                            return(false);
                        }

                        //state = 11 && have code
                        var result = await WebAuthModule.GetCharacterIdFromCode(code, clientID, secret);

                        if (result == null)
                        {
                            //TODO invalid auth
                            await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));

                            return(true);
                        }

                        var characterId = Convert.ToInt64(result[0]);

                        await SQLHelper.UpdateTimersAuth(characterId);

                        //redirect to timers
                        var iid = Convert.ToBase64String(Encoding.UTF8.GetBytes(characterId.ToString()));
                        iid = HttpUtility.UrlEncode(iid);
                        var url = $"{WebServerModule.GetTimersURL()}?data=0&id={iid}&state=11";
                        await response.RedirectAsync(new Uri(url));

                        return(true);
                    }

                    if (request.Url.LocalPath == "/timers" || request.Url.LocalPath == $"{extPort}/timers" ||
                        request.Url.LocalPath == $"{port}/timers")
                    {
                        if (string.IsNullOrWhiteSpace(request.Url.Query))
                        {
                            //redirect to auth
                            await response.RedirectAsync(new Uri(WebServerModule.GetTimersAuthURL()));

                            return(true);
                        }

                        var prms = request.Url.Query.TrimStart('?').Split('&');
                        if (prms.Length != 3)
                        {
                            await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));

                            return(true);
                        }

                        var data    = prms[0].Split('=')[1];
                        var inputId = prms[1].Split('=')[1];
                        var state   = prms[2].Split('=')[1];
                        if (state != "11")
                        {
                            await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));

                            return(true);
                        }

                        var characterId =
                            Convert.ToInt64(
                                Encoding.UTF8.GetString(Convert.FromBase64String(HttpUtility.UrlDecode(inputId))));

                        var rChar = await APIHelper.ESIAPI.GetCharacterData(Reason, characterId, true);

                        if (rChar == null)
                        {
                            await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));

                            return(true);
                        }

                        //have charId - had to check it
                        //check in db
                        var timeout = Settings.TimersModule.AuthTimeoutInMinutes;
                        if (timeout != 0)
                        {
                            var result = await SQLHelper.GetTimersAuthTime(characterId);

                            if (result == null || (DateTime.Now - DateTime.Parse(result)).TotalMinutes > timeout)
                            {
                                //redirect to auth
                                await response.RedirectAsync(new Uri(WebServerModule.GetTimersAuthURL()));

                                return(true);
                            }
                        }

                        var checkResult = await CheckAccess(characterId, rChar);

                        if (!checkResult[0])
                        {
                            await WebServerModule.WriteResponce(
                                WebServerModule.GetAccessDeniedPage("Timers Module", LM.Get("accessDenied"),
                                                                    WebServerModule.GetWebSiteUrl()), response);

                            return(true);
                        }

                        if (checkResult[1] && data.StartsWith("delete"))
                        {
                            data = data.Substring(6, data.Length - 6);
                            await SQLHelper.DeleteTimer(Convert.ToInt64(data));

                            var x = HttpUtility.ParseQueryString(request.Url.Query);
                            x.Set("data", "0");
                            await response.RedirectAsync(new Uri($"{request.Url.ToString().Split('?')[0]}?{x}"));

                            return(true);
                        }

                        await WriteCorrectResponce(response, checkResult[1], characterId);

                        return(true);
                    }
                }
                else if (request.HttpMethod == HttpMethod.Post.ToString())
                {
                    var prms = request.Url.Query.TrimStart('?').Split('&');
                    if (prms.Length != 3)
                    {
                        //await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));
                        return(false);
                    }

                    var inputId = prms[1].Split('=')[1];
                    var state   = prms[2].Split('=')[1];
                    if (state != "11")
                    {
                        // await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));
                        return(false);
                    }

                    var characterId =
                        Convert.ToInt64(
                            Encoding.UTF8.GetString(Convert.FromBase64String(HttpUtility.UrlDecode(inputId))));

                    var rChar = await APIHelper.ESIAPI.GetCharacterData(Reason, characterId, true);

                    if (rChar == null)
                    {
                        // await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));
                        return(false);
                    }

                    var checkResult = await CheckAccess(characterId, rChar);

                    if (!checkResult[0])
                    {
                        return(true);
                    }

                    var data = await request.ReadContentAsStringAsync();

                    if (checkResult[1] && data != null)
                    {
                        if (data.StartsWith("delete"))
                        {
                            data = data.Substring(6, data.Length - 6);
                            await SQLHelper.DeleteTimer(Convert.ToInt64(data));
                        }
                        else
                        {
                            TimerItem entry = null;
                            try
                            {
                                entry = JsonConvert.DeserializeObject <TimerItem>(data);
                            }
                            catch
                            {
                                //ignore
                            }

                            if (entry == null)
                            {
                                await response.WriteContentAsync(LM.Get("invalidInputData"));

                                return(true);
                            }

                            var iDate = entry.GetDateTime();
                            if (iDate == null)
                            {
                                await response.WriteContentAsync(LM.Get("invalidTimeFormat"));

                                return(true);
                            }

                            if (iDate < DateTime.Now)
                            {
                                await response.WriteContentAsync(LM.Get("passedTimeValue"));

                                return(true);
                            }

                            //save
                            entry.timerChar = rChar.name;
                            await SQLHelper.UpdateTimer(entry);
                        }

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }
            finally
            {
                RunningRequestCount--;
            }

            return(false);
        }
Esempio n. 4
0
        private async Task <bool> OnAuthRequest(HttpListenerRequestEventArgs context)
        {
            if (!Settings.Config.ModuleWebConfigEditor)
            {
                return(false);
            }

            var request  = context.Request;
            var response = context.Response;

            if (request.HttpMethod != HttpMethod.Get.ToString())
            {
                return(false);
            }

            var extIp   = Settings.WebServerModule.WebExternalIP;
            var extPort = Settings.WebServerModule.WebExternalPort;

            try
            {
                RunningRequestCount++;
                if (request.Url.LocalPath == "/callback" || request.Url.LocalPath == $"{extPort}/callback")
                {
                    var clientID = Settings.WebServerModule.CcpAppClientId;
                    var secret   = Settings.WebServerModule.CcpAppSecret;
                    var prms     = request.Url.Query.TrimStart('?').Split('&');
                    if (prms.Length == 0 || prms[0].Split('=').Length == 0 || string.IsNullOrEmpty(prms[0]))
                    {
                        return(false);
                    }
                    var code  = prms[0].Split('=')[1];
                    var state = prms.Length > 1 ? prms[1].Split('=')[1] : null;
                    if (state != "settings")
                    {
                        return(false);
                    }
                    //have code
                    var result = await WebAuthModule.GetCharacterIdFromCode(code, clientID, secret);

                    var characterId = result == null ? 0 : Convert.ToInt64(result[0]);

                    if (characterId == 0)
                    {
                        await WebServerModule.WriteResponce(
                            WebServerModule.GetAccessDeniedPage("Web Config Editor", LM.Get("accessDenied"),
                                                                WebServerModule.GetWebSiteUrl()), response);

                        return(true);
                    }

                    var rChar = await APIHelper.ESIAPI.GetCharacterData(Reason, characterId, true);

                    if (rChar == null)
                    {
                        await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));

                        return(true);
                    }

                    if (await CheckAccess(characterId, rChar) == null)
                    {
                        await WebServerModule.WriteResponce(
                            WebServerModule.GetAccessDeniedPage("Web Config Editor", LM.Get("accessDenied"),
                                                                WebServerModule.GetWebSiteUrl()), response);

                        return(true);
                    }

                    var we = new WebEditorAuthEntry
                    {
                        Id = characterId, Code = Guid.NewGuid().ToString("N"), Time = DateTime.Now
                    };
                    await SQLHelper.SaveWebEditorAuthEntry(we);

                    var url = WebServerModule.GetWebEditorUrl(we.Code);
                    await response.RedirectAsync(new Uri(url));

                    return(true);
                }

                if (request.Url.LocalPath == "/settings" || request.Url.LocalPath == $"{extPort}/settings")
                {
                    var prms = request.Url.Query.TrimStart('?').Split('&');
                    if (prms.Length == 0 || prms[0].Split('=').Length == 0 || string.IsNullOrEmpty(prms[0]))
                    {
                        return(false);
                    }
                    var code  = prms.FirstOrDefault(a => a.StartsWith("code"))?.Split('=')[1];
                    var state = prms.FirstOrDefault(a => a.StartsWith("state"))?.Split('=')[1];

                    if (state != "settings" && state != "settings_sa" && state != "settings_ti")
                    {
                        return(false);
                    }
                    if (code == null)
                    {
                        await WebServerModule.WriteResponce(
                            WebServerModule.GetAccessDeniedPage("Web Config Editor", LM.Get("accessDenied"),
                                                                WebServerModule.GetWebSiteUrl()), response);

                        return(true);
                    }

                    var we = await SQLHelper.GetWebEditorAuthEntry(code);

                    if (we == null)
                    {
                        await WebServerModule.WriteResponce(
                            WebServerModule.GetAccessDeniedPage("Web Config Editor", LM.Get("accessDenied"),
                                                                WebServerModule.GetWebSiteUrl()), response);

                        return(true);
                    }

                    var rChar = await APIHelper.ESIAPI.GetCharacterData(Reason, we.Id, true);

                    if (rChar == null)
                    {
                        await response.RedirectAsync(new Uri(WebServerModule.GetWebSiteUrl()));

                        return(true);
                    }

                    var filter = await CheckAccess(we.Id, rChar);

                    if (filter == null)
                    {
                        await WebServerModule.WriteResponce(
                            WebServerModule.GetAccessDeniedPage("Web Config Editor", LM.Get("accessDenied"),
                                                                WebServerModule.GetWebSiteUrl()), response);

                        return(true);
                    }

                    if (state == "settings_sa")
                    {
                        if (!filter.CanEditSimplifiedAuth)
                        {
                            await WebServerModule.WriteResponce("Nope", response);

                            return(true);
                        }

                        var data = prms.FirstOrDefault(a => a.StartsWith("data"))?.Split('=')[1];
                        data = HttpUtility.UrlDecode(data);
                        if (data != null)
                        {
                            //load clean settings from file
                            await SettingsManager.UpdateSettings();

                            var convData = JsonConvert.DeserializeObject <List <SaData> >(data);
                            convData = convData.Where(a =>
                                                      !string.IsNullOrEmpty(a.Name?.Trim()) && !string.IsNullOrEmpty(a.Group?.Trim()) &&
                                                      !string.IsNullOrEmpty(a.Roles?.Trim())).ToList();
                            await SettingsManager.SaveSimplifiedAuthData(convData
                                                                         .Select(a => $"{a.Name}|{a.Group}|{a.Roles}").ToList());

                            //inject updated simplified auth data
                            await SettingsManager.LoadSimplifiedAuth();

                            //rebuild auth cache
                            if (Settings.Config.ModuleAuthWeb)
                            {
                                await TickManager.GetModule <WebAuthModule>().Initialize();
                            }
                            await LogHelper.LogInfo("Simplified auth update completed!", Category);
                        }
                        else
                        {
                            var simplifiedAuthEntities = await SettingsManager.GetSimplifiedAuthData();

                            var x = new
                            {
                                total            = simplifiedAuthEntities.Count,
                                totalNotFiltered = simplifiedAuthEntities.Count,
                                rows             = simplifiedAuthEntities
                            };
                            var json = JsonConvert.SerializeObject(x);
                            await WebServerModule.WriteJsonResponse(json, response);
                        }

                        return(true);
                    }

                    if (state == "settings_ti")
                    {
                        if (!filter.CanEditTimers)
                        {
                            await WebServerModule.WriteResponce("Nope", response);

                            return(true);
                        }

                        var data = prms.FirstOrDefault(a => a.StartsWith("data"))?.Split('=')[1];
                        data = HttpUtility.UrlDecode(data);
                        if (data != null)
                        {
                            var convData = JsonConvert.DeserializeObject <List <TiData> >(data);
                            convData = convData.Where(a =>
                                                      !string.IsNullOrEmpty(a.Name?.Trim()) && !string.IsNullOrEmpty(a.Entities?.Trim()) &&
                                                      !string.IsNullOrEmpty(a.Roles?.Trim())).ToList();
                            await SaveTimersAuthData(convData);
                        }
                        else
                        {
                            var ent = SettingsManager.Settings.TimersModule.AccessList.Select(a => new TiData
                            {
                                Name     = a.Key,
                                Entities = string.Join(",", a.Value.FilterEntities.Select(b => b.ToString())),
                                Roles    = string.Join(",", a.Value.FilterDiscordRoles)
                            }).ToList();
                            var x    = new { total = ent.Count, totalNotFiltered = ent.Count, rows = ent };
                            var json = JsonConvert.SerializeObject(x);
                            await WebServerModule.WriteJsonResponse(json, response);
                        }

                        return(true);
                    }

                    //check in db
                    var timeout = Settings.WebConfigEditorModule.SessionTimeoutInMinutes;
                    if (timeout != 0)
                    {
                        if ((DateTime.Now - we.Time).TotalMinutes > timeout)
                        {
                            await SQLHelper.DeleteWebEditorEntry(we.Id);

                            //redirect to auth
                            await response.RedirectAsync(new Uri(WebServerModule.GetWebConfigAuthURL()));

                            return(true);
                        }

                        //update session overwise
                        we.Time = DateTime.Now;
                        await SQLHelper.SaveWebEditorAuthEntry(we);
                    }

                    //var groups = string.Join(", ", Settings.WebAuthModule.AuthGroups.Keys.Distinct());

                    var sb = new StringBuilder();
                    foreach (var groupName in Settings.WebAuthModule.AuthGroups.Keys.Distinct())
                    {
                        sb.Append($"{{value: '{groupName}', text: '{groupName}'}},");
                    }
                    sb.Remove(sb.Length - 1, 1);
                    var groupList = $"[{sb}]";

                    var timersContent     = string.Empty;
                    var timersScripts     = string.Empty;
                    var simpleAuthContent = string.Empty;
                    var simpleAuthScripts = string.Empty;
                    if (filter.CanEditSimplifiedAuth)
                    {
                        simpleAuthContent = File.ReadAllText(SettingsManager.FileTemplateSettingsPage_SimpleAuth)
                                            .Replace("{saAddEntry}", LM.Get("webSettingsAddEntryButton"))
                                            .Replace("{saDeleteEntry}", LM.Get("webSettingsDeleteEntryButton"))
                                            .Replace("{saSave}", LM.Get("webSettingsSaveEntryButton"))
                                            .Replace("{saTableColumnName}", LM.Get("webSettingsSaColumnName"))
                                            .Replace("{saTableColumnGroup}", LM.Get("webSettingsSaColumnGroup"))
                                            .Replace("{saTableColumnRoles}", LM.Get("webSettingsSaColumnRoles"))

                                            .Replace("{serverAddress}",
                                                     $"{Settings.WebServerModule.WebExternalIP}:{Settings.WebServerModule.WebExternalPort}")
                                            .Replace("{code}", code)
                                            .Replace("{locale}", SettingsManager.Settings.Config.Language)
                        ;

                        simpleAuthScripts = File
                                            .ReadAllText(SettingsManager.FileTemplateSettingsPage_SimpleAuth_Scripts)
                                            .Replace("{saGroupList}", groupList)
                                            .Replace("{postSimplifiedAuthUrl}", WebServerModule.GetWebEditorSimplifiedAuthUrl(code))
                        ;
                    }

                    if (filter.CanEditTimers)
                    {
                        timersContent = File.ReadAllText(SettingsManager.FileTemplateSettingsPage_Timers)
                                        .Replace("{saAddEntry}", LM.Get("webSettingsAddEntryButton"))

                                        .Replace("{saAddEntry}", LM.Get("webSettingsAddEntryButton"))
                                        .Replace("{saDeleteEntry}", LM.Get("webSettingsDeleteEntryButton"))
                                        .Replace("{saSave}", LM.Get("webSettingsSaveEntryButton"))
                                        .Replace("{saTableColumnName}", LM.Get("webSettingsSaColumnName"))
                                        .Replace("{tiTableColumnEntities}", LM.Get("webSettingsTiColumnEntities"))
                                        .Replace("{saTableColumnRoles}", LM.Get("webSettingsSaColumnRoles"))

                                        .Replace("{serverAddress}",
                                                 $"{Settings.WebServerModule.WebExternalIP}:{Settings.WebServerModule.WebExternalPort}")
                                        .Replace("{code}", code)
                                        .Replace("{locale}", SettingsManager.Settings.Config.Language)
                        ;

                        timersScripts = File.ReadAllText(SettingsManager.FileTemplateSettingsPage_Timers_Scripts)
                                        .Replace("{postTimersUrl}", WebServerModule.GetWebEditorTimersUrl(code))
                        ;
                    }

                    var saActive = filter.CanEditSimplifiedAuth ? "active" : null;
                    var tiActive = saActive != null || !filter.CanEditTimers ? null : "active";

                    var text = File.ReadAllText(SettingsManager.FileTemplateSettingsPage)
                               .Replace("{headerContent}", WebServerModule.GetHtmlResourceTables())
                               .Replace("{header}", LM.Get("webSettingsHeader"))
                               .Replace("{Back}", LM.Get("Back"))
                               .Replace("{LogOut}", LM.Get("LogOut"))
                               .Replace("{loggedInAs}", LM.Get("loggedInAs", rChar.name))
                               .Replace("{LogOutUrl}", WebServerModule.GetWebSiteUrl())
                               .Replace("{backUrl}", WebServerModule.GetWebSiteUrl())
                               .Replace("{simpleAuthContent}", simpleAuthContent)
                               .Replace("{simpleAuthScripts}", simpleAuthScripts)
                               .Replace("{timersContent}", timersContent)
                               .Replace("{timersScripts}", timersScripts)
                               .Replace("{code}", code)
                               .Replace("{locale}", SettingsManager.Settings.Config.Language)
                               .Replace("{simpleAuthTabName}", LM.Get("webSettingsSimpleAuthTabName"))
                               .Replace("{timersTabName}", LM.Get("webSettingsTimersTabName"))
                               .Replace("{saPageVisible}", filter.CanEditSimplifiedAuth ? null : "d-none")
                               .Replace("{tiPageVisible}", filter.CanEditTimers ? null : "d-none")
                               .Replace("{saPageActive}", saActive)
                               .Replace("{tiPageActive}", tiActive)
                    ;
                    await WebServerModule.WriteResponce(text, response);

                    return(true);
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx($"Error: {ex.Message}", ex, Category);
            }
            finally
            {
                RunningRequestCount--;
            }
            return(false);
        }
Esempio n. 5
0
        private async Task <bool> OnAuthRequest(HttpListenerRequestEventArgs context)
        {
            if (!Settings.Config.ModuleIndustrialJobs)
            {
                return(false);
            }

            var request  = context.Request;
            var response = context.Response;

            try
            {
                var port = Settings.WebServerModule.WebExternalPort;

                if (request.HttpMethod == HttpMethod.Get.ToString())
                {
                    if (request.Url.LocalPath == "/callback" || request.Url.LocalPath == $"{port}/callback")
                    {
                        var clientID = Settings.WebServerModule.CcpAppClientId;
                        var secret   = Settings.WebServerModule.CcpAppSecret;
                        var prms     = request.Url.Query.TrimStart('?').Split('&');
                        var code     = prms[0].Split('=')[1];
                        var state    = prms.Length > 1 ? prms[1].Split('=')[1] : null;

                        if (string.IsNullOrEmpty(state))
                        {
                            return(false);
                        }

                        if (!state.StartsWith("ijobsauth"))
                        {
                            return(false);
                        }
                        var groupName = HttpUtility.UrlDecode(state.Replace("ijobsauth", ""));

                        var result = await WebAuthModule.GetCharacterIdFromCode(code, clientID, secret);

                        if (result == null)
                        {
                            await WebServerModule.WriteResponce(WebServerModule.GetAccessDeniedPage("Industry Jobs Module", LM.Get("accessDenied"), WebServerModule.GetAuthPageUrl()), response);

                            return(true);
                        }

                        var lCharId = Convert.ToInt64(result[0]);
                        //var group = Settings.IndustrialJobsModule.Groups[groupName];
                        var allowedCharacterIds = GetParsedCharacters(groupName);
                        if (!allowedCharacterIds.Contains(lCharId))
                        {
                            await WebServerModule.WriteResponce(WebServerModule.GetAccessDeniedPage("Industry Jobs Module", LM.Get("accessDenied"), WebServerModule.GetAuthPageUrl()), response);

                            return(true);
                        }

                        await SQLHelper.InsertOrUpdateTokens("", result[0], null, null, result[1]);

                        await WebServerModule.WriteResponce(File.ReadAllText(SettingsManager.FileTemplateMailAuthSuccess)
                                                            .Replace("{headerContent}", WebServerModule.GetHtmlResourceDefault(false))
                                                            .Replace("{header}", "authTemplateHeader")
                                                            .Replace("{body}", LM.Get("industryJobsAuthSuccessHeader"))
                                                            .Replace("{body2}", LM.Get("industryJobsAuthSuccessBody"))
                                                            .Replace("{backText}", LM.Get("backText")), response
                                                            );

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }
            return(false);
        }
        public async Task <bool> Auth(HttpListenerRequestEventArgs context)
        {
            if (!Settings.Config.ModuleNotificationFeed)
            {
                return(false);
            }

            var request  = context.Request;
            var response = context.Response;
            var extPort  = Settings.WebServerModule.WebExternalPort;
            var port     = Settings.WebServerModule.WebExternalPort;

            try
            {
                RunningRequestCount++;
                if (request.HttpMethod != HttpMethod.Get.ToString())
                {
                    return(false);
                }
                if ((request.Url.LocalPath == "/callback" || request.Url.LocalPath == $"{extPort}/callback" ||
                     request.Url.LocalPath == $"{port}/callback") &&
                    request.Url.Query.Contains("&state=9"))
                {
                    var prms = request.Url.Query.TrimStart('?').Split('&');
                    var code = prms[0].Split('=')[1];
                    // var state = prms.Length > 1 ? prms[1].Split('=')[1] : null;

                    var result = await WebAuthModule.GetCharacterIdFromCode(code,
                                                                            Settings.WebServerModule.CcpAppClientId, Settings.WebServerModule.CcpAppSecret);

                    if (result == null)
                    {
                        var message = LM.Get("ESIFailure");
                        await WebServerModule.WriteResponce(File.ReadAllText(SettingsManager.FileTemplateAuth3)
                                                            .Replace("{message}", message)
                                                            .Replace("{headerContent}", WebServerModule.GetHtmlResourceDefault(false))
                                                            .Replace("{header}", LM.Get("authTemplateHeader"))
                                                            .Replace("{backUrl}", WebServerModule.GetAuthLobbyUrl())
                                                            .Replace("{backText}", LM.Get("backText")), response);

                        return(true);
                    }

                    var characterID   = result[0];
                    var numericCharId = Convert.ToInt64(characterID);

                    if (string.IsNullOrEmpty(characterID))
                    {
                        await LogHelper.LogWarning("Bad or outdated notify feed request!");

                        await WebServerModule.WriteResponce(File.ReadAllText(SettingsManager.FileTemplateAuthNotifyFail)
                                                            .Replace("{headerContent}", WebServerModule.GetHtmlResourceDefault(false))
                                                            .Replace("{message}", LM.Get("authTokenBadRequest"))
                                                            .Replace("{header}", LM.Get("authTokenHeader"))
                                                            .Replace("{body}", LM.Get("authTokenBodyFail"))
                                                            .Replace("{backText}", LM.Get("backText")),
                                                            response);

                        return(true);
                    }

                    if (!TickManager.GetModule <NotificationModule>().IsValidCharacter(numericCharId))
                    {
                        await LogHelper.LogWarning($"Unathorized notify feed request from {characterID}");

                        await WebServerModule.WriteResponce(File.ReadAllText(SettingsManager.FileTemplateAuthNotifyFail)
                                                            .Replace("{headerContent}", WebServerModule.GetHtmlResourceDefault(false))
                                                            .Replace("{message}", LM.Get("authTokenInvalid"))
                                                            .Replace("{header}", LM.Get("authTokenHeader"))
                                                            .Replace("{body}", LM.Get("authTokenBodyFail"))
                                                            .Replace("{backText}", LM.Get("backText")),
                                                            response);

                        return(true);
                    }

                    var rChar = await APIHelper.ESIAPI.GetCharacterData(Reason, characterID, true);

                    await SQLHelper.InsertOrUpdateTokens(result[1] ?? "", characterID, null, "");

                    await LogHelper.LogInfo($"Notification feed added for character: {characterID}", LogCat.AuthWeb);

                    await WebServerModule.WriteResponce(File.ReadAllText(SettingsManager.FileTemplateAuthNotifySuccess)
                                                        .Replace("{headerContent}", WebServerModule.GetHtmlResourceDefault(false))
                                                        .Replace("{body2}", LM.Get("authTokenRcv2", rChar.name))
                                                        .Replace("{body}", LM.Get("authTokenRcv")).Replace("{header}", LM.Get("authTokenHeader"))
                                                        .Replace("{backText}", LM.Get("backText")), response);

                    return(true);
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }
            finally
            {
                RunningRequestCount--;
            }

            return(false);
        }
        public async Task <WebQueryResult> ProcessRequest(string query, CallbackTypeEnum type, string ip, WebAuthUserData data)
        {
            if (!Settings.Config.ModuleNotificationFeed)
            {
                return(WebQueryResult.False);
            }

            try
            {
                RunningRequestCount++;
                if (query.Contains("&state=9"))
                {
                    //var prms = QueryHelpers.ParseQuery(query);
                    var prms = query.TrimStart('?').Split('&');
                    var code = prms[0].Split('=')[1];

                    var result = await WebAuthModule.GetCharacterIdFromCode(code,
                                                                            Settings.WebServerModule.CcpAppClientId, Settings.WebServerModule.CcpAppSecret);

                    if (result == null)
                    {
                        return(WebQueryResult.EsiFailure);
                    }

                    var characterId   = result[0];
                    var numericCharId = Convert.ToInt64(characterId);

                    if (string.IsNullOrEmpty(characterId))
                    {
                        await LogHelper.LogWarning("Bad or outdated notify feed request!");

                        var r = WebQueryResult.BadRequestToSystemAuth;
                        r.Message1 = LM.Get("authTokenBodyFail");
                        r.Message2 = LM.Get("authTokenBadRequest");
                        return(r);
                    }

                    if (!TickManager.GetModule <NotificationModule>().IsValidCharacter(numericCharId))
                    {
                        await LogHelper.LogWarning($"Unauthorized notify feed request from {characterId}");

                        var r = WebQueryResult.BadRequestToSystemAuth;
                        r.Message1 = LM.Get("authTokenBodyFail");
                        return(r);
                    }

                    var rChar = await APIHelper.ESIAPI.GetCharacterData(Reason, characterId, true);

                    await SQLHelper.InsertOrUpdateTokens(result[1] ?? "", characterId, null, "");

                    await LogHelper.LogInfo($"Notification feed added for character: {characterId}", LogCat.AuthWeb);

                    var res = WebQueryResult.GeneralAuthSuccess;
                    res.Message1 = LM.Get("authTokenRcv");
                    res.Message2 = LM.Get("authTokenRcv2", rChar.name);
                    return(res);
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }
            finally
            {
                RunningRequestCount--;
            }

            return(WebQueryResult.False);
        }
        private async Task <bool> OnAuthRequest(HttpListenerRequestEventArgs context)
        {
            if (!Settings.Config.ModuleContractNotifications)
            {
                return(false);
            }

            var request  = context.Request;
            var response = context.Response;

            try
            {
                var extPort = Settings.WebServerModule.WebExternalPort;
                var port    = Settings.WebServerModule.WebExternalPort;

                if (request.HttpMethod == HttpMethod.Get.ToString())
                {
                    if (request.Url.LocalPath == "/callback" || request.Url.LocalPath == $"{extPort}/callback" || request.Url.LocalPath == $"{port}/callback")
                    {
                        var clientID = Settings.WebServerModule.CcpAppClientId;
                        var secret   = Settings.WebServerModule.CcpAppSecret;
                        var prms     = request.Url.Query.TrimStart('?').Split('&');
                        var code     = prms[0].Split('=')[1];
                        var state    = prms.Length > 1 ? prms[1].Split('=')[1] : null;

                        if (string.IsNullOrEmpty(state))
                        {
                            return(false);
                        }
                        if (state.StartsWith("opencontract"))
                        {
                            var contractId = Convert.ToInt64(state.Substring(12, state.Length - 12));
                            var res        = await APIHelper.ESIAPI.GetAuthToken(code, clientID, secret);

                            if (string.IsNullOrEmpty(res[0]))
                            {
                                await WebServerModule.WriteResponce(WebServerModule.GetAccessDeniedPage("Contracts Module", LM.Get("contractFailedToOpen"), WebServerModule.GetWebSiteUrl()), response);

                                return(true);
                            }

                            if (await APIHelper.ESIAPI.OpenContractIngame(Reason, contractId, res[0]))
                            {
                                await WebServerModule.WriteResponce(LM.Get("contractOpened"), response);
                            }
                            else
                            {
                                await WebServerModule.WriteResponce(WebServerModule.GetAccessDeniedPage("Contracts Module", LM.Get("contractFailedToOpen"), WebServerModule.GetWebSiteUrl()), response);
                            }

                            return(true);
                        }

                        if (!state.StartsWith("cauth"))
                        {
                            return(false);
                        }
                        var groupName = HttpUtility.UrlDecode(state.Replace("cauth", ""));

                        var result = await WebAuthModule.GetCharacterIdFromCode(code, clientID, secret);

                        if (result == null)
                        {
                            await WebServerModule.WriteResponce(WebServerModule.GetAccessDeniedPage("Contracts Module", LM.Get("accessDenied"), WebServerModule.GetAuthPageUrl()), response);

                            return(true);
                        }

                        var lCharId = Convert.ToInt64(result[0]);
                        var group   = Settings.ContractNotificationsModule.GetEnabledGroups()[groupName];
                        if (!group.CharacterIDs.Contains(lCharId))
                        {
                            await WebServerModule.WriteResponce(WebServerModule.GetAccessDeniedPage("Contracts Module", LM.Get("accessDenied"), WebServerModule.GetAuthPageUrl()), response);

                            return(true);
                        }

                        await SQLHelper.InsertOrUpdateTokens("", result[0], "", result[1]);

                        await WebServerModule.WriteResponce(File.ReadAllText(SettingsManager.FileTemplateMailAuthSuccess)
                                                            .Replace("{headerContent}", WebServerModule.GetHtmlResourceDefault(false))
                                                            .Replace("{header}", "authTemplateHeader")
                                                            .Replace("{body}", LM.Get("contractAuthSuccessHeader"))
                                                            .Replace("{body2}", LM.Get("contractAuthSuccessBody"))
                                                            .Replace("{backText}", LM.Get("backText")), response
                                                            );

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }
            return(false);
        }
Esempio n. 9
0
        private async Task <bool> OnAuthRequest(HttpListenerRequestEventArgs context)
        {
            if (!Settings.Config.ModuleMail)
            {
                return(false);
            }

            var request  = context.Request;
            var response = context.Response;

            try
            {
                var extPort = Settings.WebServerModule.WebExternalPort;
                var port    = Settings.WebServerModule.WebListenPort;

                if (request.HttpMethod == HttpMethod.Get.ToString())
                {
                    if (request.Url.LocalPath == "/callback.php" || request.Url.LocalPath == $"{extPort}/callback.php" || request.Url.LocalPath == $"{port}/callback.php")
                    {
                        var clientID = Settings.WebServerModule.CcpAppClientId;
                        var secret   = Settings.WebServerModule.CcpAppSecret;

                        var prms  = request.Url.Query.TrimStart('?').Split('&');
                        var code  = prms[0].Split('=')[1];
                        var state = prms.Length > 1 ? prms[1].Split('=')[1] : null;

                        if (state != "12")
                        {
                            return(false);
                        }

                        //state = 12 && have code
                        var result = await WebAuthModule.GetCharacterIdFromCode(code, clientID, secret);

                        if (result == null)
                        {
                            await WebServerModule.WriteResponce(WebServerModule.GetAccessDeniedPage("Mail Module", LM.Get("accessDenied")), response);

                            return(true);
                        }

                        await SQLHelper.SQLiteDataInsertOrUpdateTokens("", result[0], result[1]);

                        await WebServerModule.WriteResponce(File.ReadAllText(SettingsManager.FileTemplateMailAuthSuccess)
                                                            .Replace("{header}", "authTemplateHeader")
                                                            .Replace("{body}", LM.Get("mailAuthSuccessHeader"))
                                                            .Replace("{body2}", LM.Get("mailAuthSuccessBody"))
                                                            .Replace("{backText}", LM.Get("backText")), response
                                                            );

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, Category);
            }

            return(false);
        }