示例#1
0
        public async Task <IActionResult> OnGet()
        {
            var mod = await SharedSettings.GetIndexStatsAsync(_db);

            TotalUserJournalCount = mod.TotalUserJournalCount;
            TotalUserJournalLines = mod.TotalUserJournalLines;
            UserCount             = mod.TotalUserCount;

            if (User.Identity.IsAuthenticated)
            {
                LoggedInUser = await _db.ExecuteSingleRowAsync <Profile>("SELECT * FROM user_profile WHERE user_identifier = @user_identifier", new SqlParameter("user_identifier", User.Identity.Name));


                var rdb = SharedSettings.RedisClient.GetDatabase(0);

                var cmdrNameCache = await rdb.StringGetAsync($"commanderName:{User.Identity.Name}");

                if (cmdrNameCache.IsNull)
                {
                    var hc = _httpClientFactory.CreateClient();
                    hc.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", LoggedInUser.UserSettings.AuthToken);
                    hc.BaseAddress = new Uri("https://companion.orerve.net");

                    var cmdrProfile = await GetProfileAsync(hc);

                    var cmdrJson = await cmdrProfile.Content.ReadAsStringAsync();

                    if (!cmdrProfile.IsSuccessStatusCode || cmdrJson.Trim() == "{}")
                    {
                        return(Redirect("~/api/journal/logout"));
                    }

                    if (!string.IsNullOrWhiteSpace(cmdrJson))
                    {
                        var cmdrInfo = JsonSerializer.Deserialize <EliteProfile>(cmdrJson);

                        CommanderName = cmdrInfo.Commander.Name;

                        if (string.IsNullOrWhiteSpace(CommanderName))
                        {
                            return(Redirect("~/api/journal/logout"));;
                        }

                        await rdb.StringSetAsyncWithRetries($"commanderName:{User.Identity.Name}", CommanderName, TimeSpan.FromMinutes(30));
                    }
                    else
                    {
                        CommanderName = "(Unknown, API Issues)";
                    }
                }
                else
                {
                    CommanderName = cmdrNameCache;
                }

                LoggedInUserJournalCount = await _db.ExecuteScalarAsync <long>(
                    "SELECT COUNT_BIG(journal_id) FROM user_journal WHERE user_identifier = @user_identifier AND last_processed_line_number > 0",
                    new SqlParameter("user_identifier", User.Identity.Name)
                    );

                IntegrationsEnabled.Add("EDDN", LoggedInUser.SendToEDDN);

                foreach (var inte in LoggedInUser.IntegrationSettings)
                {
                    IntegrationsEnabled.Add(inte.Key, inte.Value.GetProperty("enabled").GetBoolean());
                }
            }

            return(Page());
        }
示例#2
0
        public static async Task SendStatsTweetAsync(PerformContext context)
        {
            context.WriteLine("Looking for tokens to refresh!");
            using (var scope = Startup.ServiceProvider.CreateScope())
            {
                IConfiguration configuration = scope.ServiceProvider.GetRequiredService <IConfiguration>();
                MSSQLDB        db            = scope.ServiceProvider.GetRequiredService <MSSQLDB>();

                var tweetSender = scope.ServiceProvider.GetRequiredService <TwitterSender>();

                var _rdb = SharedSettings.RedisClient.GetDatabase(0);

                var prevIndexStats = await _rdb.StringGetAsync("weekly-stats-json");

                var mod = await SharedSettings.GetIndexStatsAsync(db);

                StringBuilder sb = new StringBuilder();

                sb.AppendLine("Weekly stats #EliteDangerous");
                sb.AppendLine("");

                if (!prevIndexStats.IsNullOrEmpty)
                {
                    try
                    {
                        var prevIndexModel = JsonConvert.DeserializeObject <IndexStatsModel>(prevIndexStats);
                        var userDiff       = mod.TotalUserCount - prevIndexModel.TotalUserCount;
                        var journalDiff    = mod.TotalUserJournalCount - prevIndexModel.TotalUserJournalCount;
                        var linesDiff      = mod.TotalUserJournalLines - prevIndexModel.TotalUserJournalLines;

                        if (linesDiff == 0 && journalDiff == 0 && userDiff == 0)
                        {
                            // No changes, no need to send tweet
                            return;
                        }

                        if (userDiff > 0)
                        {
                            sb.AppendLine($"{SharedSettings.NumberFixer(userDiff)} user(s) registered (Total {SharedSettings.NumberFixer(mod.TotalUserCount)})");
                        }

                        if (journalDiff > 0)
                        {
                            sb.AppendLine($"{SharedSettings.NumberFixer(journalDiff)} journal(s) saved (Total {SharedSettings.NumberFixer(mod.TotalUserJournalCount)})");
                        }

                        if (linesDiff > 0)
                        {
                            sb.AppendLine($"{SharedSettings.NumberFixer(linesDiff)} lines(s) saved (Total {SharedSettings.NumberFixer(mod.TotalUserJournalLines)})");
                        }
                    }
                    catch
                    {
                        sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserCount)} users registered");
                        sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalCount)} journals saved");
                        sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalLines)} lines of journal");
                    }
                }
                else
                {
                    sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserCount)} users registered");
                    sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalCount)} journals saved");
                    sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalLines)} lines of journal");
                }

                _rdb.StringSet("weekly-stats-json", JsonConvert.SerializeObject(mod));

                sb.AppendLine("https://journal-limpet.com");

                var res = await tweetSender.SendAsync(sb.ToString());

                if (!res.status)
                {
                    await MailSender.SendSingleEmail(configuration, "*****@*****.**", "Failed to send tweet", res.response);
                }
            }
        }