-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSeedData.cs
123 lines (100 loc) · 4.09 KB
/
SeedData.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
namespace SaturdayMP.Examples.TpsReportUploader.Data;
public static class SeedData
{
public static async Task SeedAsync(ApplicationDbContext dbContext)
{
if (dbContext.Users.Any())
{
return;
}
CreateUser("chris122", $"password", false, dbContext);
CreateUser("tom", $"qwerty", false, dbContext);
CreateUser("bill84", $"dxR`Bg4E9k(U/n", true, dbContext);
CreateUser("peter46", $"y?:F&6E4M*b2", true, dbContext);
CreateUser("michael32", $"Txet9[W#cR7{{", true, dbContext);
CreateUser("samir", $"A,N2`qLcxZ;54n", true, dbContext);
await dbContext.SaveChangesAsync();
for (var i = -10; i < 0; i++)
{
CreateReportProcessRun(DateTime.Today.AddDays(i), dbContext);
}
await dbContext.SaveChangesAsync();
CreateUnprocessedFiles();
CreateProcessedFiles(dbContext);
}
private static void CreateUnprocessedFiles()
{
if (Directory.Exists("wwwroot/uploads"))
{
Directory.Delete("wwwroot/uploads", true);
}
Directory.CreateDirectory("wwwroot/uploads");
File.WriteAllText(Path.Combine("wwwroot/uploads", UnprocessedReportName("samir")), "TPS Report for samir this not yet processed. FIRST_FLAG!!!");
}
private static void CreateProcessedFiles(ApplicationDbContext dbContext)
{
if (Directory.Exists("processed_reports"))
{
Directory.Delete("processed_reports", true);
}
Directory.CreateDirectory("processed_reports");
var processItems = dbContext.ReportProcessRunItems
.Include(reportProcessRunItem => reportProcessRunItem.ApplicationUser)
.Include(reportProcessRunItem => reportProcessRunItem.ReportProcessRun).ToList();
foreach (var item in processItems)
{
var fileName = Path.Combine("processed_reports", ProcessedReportName(item.ApplicationUser.UserName, item.ReportProcessRun.RunDate));
var textToWrite = $"TPS Report for {item.ApplicationUser.UserName} that was processed on {item.ReportProcessRun.RunDate:yyyy-MM-dd}";
if (item.ApplicationUser.UserName == "samir" && DateTime.Today.AddDays(-4).Date == item.ReportProcessRun.RunDate.Date)
{
textToWrite += " SAMIR_SECOND_FLAG!!!";
}
File.WriteAllText(fileName, textToWrite);
}
}
private static void CreateReportProcessRun(DateTime date, ApplicationDbContext dbContext)
{
var processRun = new ReportProcessRun()
{
RunDate = date
};
var users = dbContext.Users.ToList();
foreach (var user in users)
{
var processItem = new ReportProcessRunItem()
{
ApplicationUser = user,
ReportProcessRun = processRun,
ReportName = ProcessedReportName(user.UserName, date)
};
dbContext.Add(processItem);
}
dbContext.Add(processRun);
}
private static void CreateUser(string userName, string password, bool lockoutEnabled, ApplicationDbContext dbContext)
{
var user = new ApplicationUser()
{
UserName = userName,
NormalizedUserName = userName.ToUpper(),
Email = $"{userName}@initech.com",
NormalizedEmail = $"{userName}@initech.com".ToUpper(),
EmailConfirmed = true,
LockoutEnabled = lockoutEnabled
};
dbContext.Users.Add(user);
var hasher = new PasswordHasher<ApplicationUser>();
user.SecurityStamp = Guid.NewGuid().ToString();
user.PasswordHash = hasher.HashPassword(user, password);
}
private static string UnprocessedReportName(string? userName)
{
return $"{userName}-tpsreport.txt";
}
private static string ProcessedReportName(string? userName, DateTime date)
{
return $"{userName}-tpsreport-{date:yyyy-MM-dd}.txt";
}
}