Skip to content

Commit d09d10a

Browse files
authored
Merge pull request #1134 from hargata/Hargata/1133
Handle image attachments that are too long to fit in a single page.
2 parents b42527f + 98561e7 commit d09d10a

35 files changed

+933
-117
lines changed

Controllers/AdminController.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ public IActionResult DeleteToken(int tokenId)
7272
[HttpPost]
7373
public IActionResult DeleteUser(int userId)
7474
{
75-
var result =_userLogic.DeleteAllAccessToUser(userId) && _configHelper.DeleteUserConfig(userId) && _loginLogic.DeleteUser(userId);
75+
var result =_userLogic.DeleteAllAccessToUser(userId)
76+
&& _configHelper.DeleteUserConfig(userId)
77+
&& _loginLogic.DeleteUser(userId)
78+
&& _userLogic.DeleteAllHouseholdByChildUserId(userId)
79+
&& _userLogic.DeleteAllHouseholdByParentUserId(userId);
7680
return Json(result);
7781
}
7882
[HttpPost]
@@ -81,5 +85,24 @@ public IActionResult UpdateUserAdminStatus(int userId, bool isAdmin)
8185
var result = _loginLogic.MakeUserAdmin(userId, isAdmin);
8286
return Json(result);
8387
}
88+
[HttpGet]
89+
public IActionResult GetUserHouseholdModal(int userId)
90+
{
91+
var households = _userLogic.GetHouseholdForParentUserId(userId);
92+
var viewModel = new UserHouseholdAdminViewModel { Households = households, ParentUserId = userId };
93+
return PartialView("_AdminUserHouseholdModal", viewModel);
94+
}
95+
[HttpPost]
96+
public IActionResult RemoveUserFromHousehold(int parentUserId, int childUserId)
97+
{
98+
var result = _userLogic.DeleteUserFromHousehold(parentUserId, childUserId);
99+
return Json(result);
100+
}
101+
[HttpPost]
102+
public IActionResult AddUserToHousehold(int parentUserId, string username)
103+
{
104+
var result = _userLogic.AddUserToHousehold(parentUserId, username);
105+
return Json(result);
106+
}
84107
}
85108
}

Controllers/HomeController.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,24 @@ public IActionResult GetUserAccountInformationModal()
289289
var userName = User.Identity.Name;
290290
return PartialView("_AccountModal", new UserData() { EmailAddress = emailAddress, UserName = userName });
291291
}
292+
[HttpGet]
293+
public IActionResult GetHouseholdModal()
294+
{
295+
var households = _userLogic.GetHouseholdForParentUserId(GetUserID());
296+
return PartialView("_UserHouseholdModal", households);
297+
}
298+
[HttpPost]
299+
public IActionResult RemoveUserFromHousehold(int userId)
300+
{
301+
var result = _userLogic.DeleteUserFromHousehold(GetUserID(), userId);
302+
return Json(result);
303+
}
304+
[HttpPost]
305+
public IActionResult AddUserToHousehold(string username)
306+
{
307+
var result = _userLogic.AddUserToHousehold(GetUserID(), username);
308+
return Json(result);
309+
}
292310
[Authorize(Roles = nameof(UserData.IsRootUser))]
293311
[HttpGet]
294312
public IActionResult GetRootAccountInformationModal()

Controllers/LoginController.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public async Task<IActionResult> RemoteAuth(string code, string state = "")
146146
var userAccessToken = decodedToken?.access_token ?? string.Empty;
147147
var tokenParser = new JsonWebTokenHandler();
148148
bool passedSignatureCheck = true;
149+
string signatureValidationError = "check jwks endpoint";
149150
if (!string.IsNullOrWhiteSpace(openIdConfig.JwksURL))
150151
{
151152
//validate token signature if jwks endpoint is provided
@@ -165,6 +166,10 @@ public async Task<IActionResult> RemoteAuth(string code, string state = "")
165166
if (!validatedIdToken.IsValid)
166167
{
167168
passedSignatureCheck = false;
169+
if (validatedIdToken.Exception != null && !string.IsNullOrWhiteSpace(validatedIdToken.Exception.Message))
170+
{
171+
signatureValidationError = validatedIdToken.Exception.Message;
172+
}
168173
}
169174
}
170175
}
@@ -238,7 +243,7 @@ public async Task<IActionResult> RemoteAuth(string code, string state = "")
238243
}
239244
else
240245
{
241-
_logger.LogError($"OpenID Provider did not provide a valid id_token: check jwks endpoint");
246+
_logger.LogError($"OpenID Provider did not provide a valid id_token: {signatureValidationError}");
242247
}
243248
}
244249
else
@@ -329,6 +334,10 @@ public async Task<IActionResult> RemoteAuthDebug(string code, string state = "")
329334
if (!validatedIdToken.IsValid)
330335
{
331336
passedSignatureCheck = false;
337+
if (validatedIdToken.Exception != null && !string.IsNullOrWhiteSpace(validatedIdToken.Exception.Message))
338+
{
339+
results.Add(OperationResponse.Failed($"Failed JWT Validation: {validatedIdToken.Exception.Message}"));
340+
}
332341
} else
333342
{
334343
results.Add(OperationResponse.Succeed($"Passed JWT Validation - Valid To: {validatedIdToken.SecurityToken.ValidTo}"));

Controllers/MigrationController.cs

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ private void InitializeTables(NpgsqlDataSource conn)
5454
"CREATE TABLE IF NOT EXISTS app.useraccessrecords (userId INT, vehicleId INT, PRIMARY KEY(userId, vehicleId))",
5555
"CREATE TABLE IF NOT EXISTS app.extrafields (id INT primary key, data jsonb not null)",
5656
"CREATE TABLE IF NOT EXISTS app.inspectionrecords (id INT GENERATED BY DEFAULT AS IDENTITY primary key, vehicleId INT not null, data jsonb not null)",
57-
"CREATE TABLE IF NOT EXISTS app.inspectionrecordtemplates (id INT GENERATED BY DEFAULT AS IDENTITY primary key, vehicleId INT not null, data jsonb not null)"
57+
"CREATE TABLE IF NOT EXISTS app.inspectionrecordtemplates (id INT GENERATED BY DEFAULT AS IDENTITY primary key, vehicleId INT not null, data jsonb not null)",
58+
"CREATE TABLE IF NOT EXISTS app.userhouseholdrecords (parentUserId INT, childUserId INT, PRIMARY KEY(parentUserId, childUserId))"
5859
};
5960
foreach(string cmd in cmds)
6061
{
@@ -103,6 +104,7 @@ public IActionResult Export()
103104
var extrafields = new List<RecordExtraField>();
104105
var inspectionrecords = new List<InspectionRecord>();
105106
var inspectionrecordtemplates = new List<InspectionRecordInput>();
107+
var userhouseholdrecords = new List<UserHousehold>();
106108
#region "Part1"
107109
string cmd = $"SELECT data FROM app.vehicles";
108110
using (var ctext = pgDataSource.CreateCommand(cmd))
@@ -455,6 +457,32 @@ public IActionResult Export()
455457
table.Upsert(record);
456458
};
457459
}
460+
cmd = $"SELECT parentUserId, childUserId FROM app.userhouseholdrecords";
461+
using (var ctext = pgDataSource.CreateCommand(cmd))
462+
{
463+
using (NpgsqlDataReader reader = ctext.ExecuteReader())
464+
while (reader.Read())
465+
{
466+
UserHousehold result = new UserHousehold()
467+
{
468+
Id = new HouseholdAccess
469+
{
470+
ParentUserId = int.Parse(reader["parentUserId"].ToString()),
471+
ChildUserId = int.Parse(reader["childUserId"].ToString())
472+
}
473+
};
474+
userhouseholdrecords.Add(result);
475+
}
476+
}
477+
foreach (var record in userhouseholdrecords)
478+
{
479+
using (var db = new LiteDatabase(fullFileName))
480+
{
481+
var table = db.GetCollection<UserHousehold>("userhouseholdrecords");
482+
table.Upsert(record);
483+
}
484+
;
485+
}
458486
#endregion
459487
var destFilePath = $"{fullFolderPath}.zip";
460488
ZipFile.CreateFromDirectory(fullFolderPath, destFilePath);
@@ -505,6 +533,7 @@ public IActionResult Import(string fileName)
505533
var extrafields = new List<RecordExtraField>();
506534
var inspectionrecords = new List<InspectionRecord>();
507535
var inspectionrecordtemplates = new List<InspectionRecordInput>();
536+
var userhouseholdrecords = new List<UserHousehold>();
508537
#region "Part1"
509538
using (var db = new LiteDatabase(fullFileName))
510539
{
@@ -816,6 +845,22 @@ public IActionResult Import(string fileName)
816845
ctext.ExecuteNonQuery();
817846
}
818847
}
848+
using (var db = new LiteDatabase(fullFileName))
849+
{
850+
var table = db.GetCollection<UserHousehold>("userhouseholdrecords");
851+
userhouseholdrecords = table.FindAll().ToList();
852+
}
853+
;
854+
foreach (var record in userhouseholdrecords)
855+
{
856+
string cmd = $"INSERT INTO app.userhouseholdrecords (parentUserId, childUserId) VALUES(@parentUserId, @childUserId)";
857+
using (var ctext = pgDataSource.CreateCommand(cmd))
858+
{
859+
ctext.Parameters.AddWithValue("parentUserId", record.Id.ParentUserId);
860+
ctext.Parameters.AddWithValue("childUserId", record.Id.ChildUserId);
861+
ctext.ExecuteNonQuery();
862+
}
863+
}
819864
#endregion
820865
return Json(OperationResponse.Succeed("Data Imported Successfully"));
821866
}

Controllers/Vehicle/ReportController.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ public IActionResult GetReportPartialView(int vehicleId)
118118
}
119119
//get collaborators
120120
var collaborators = _userLogic.GetCollaboratorsForVehicle(vehicleId);
121-
viewModel.Collaborators = collaborators;
121+
var userCanModify = _userLogic.UserCanDirectlyEditVehicle(GetUserID(), vehicleId);
122+
viewModel.Collaborators = new VehicleCollaboratorViewModel { CanModifyCollaborators = userCanModify, Collaborators = collaborators};
122123
//get MPG per month.
123124
var mileageData = _gasHelper.GetGasRecordViewModels(gasRecords, userConfig.UseMPG, !vehicleData.IsElectric && userConfig.UseUKMPG);
124125
string preferredFuelMileageUnit = _config.GetUserConfig(User).PreferredGasMileageUnit;
@@ -176,16 +177,22 @@ public IActionResult GetReportPartialView(int vehicleId)
176177
public IActionResult GetCollaboratorsForVehicle(int vehicleId)
177178
{
178179
var result = _userLogic.GetCollaboratorsForVehicle(vehicleId);
179-
return PartialView("_Collaborators", result);
180+
var userCanModify = _userLogic.UserCanDirectlyEditVehicle(GetUserID(), vehicleId);
181+
var viewModel = new VehicleCollaboratorViewModel
182+
{
183+
Collaborators = result,
184+
CanModifyCollaborators = userCanModify
185+
};
186+
return PartialView("_Collaborators", viewModel);
180187
}
181-
[TypeFilter(typeof(CollaboratorFilter))]
188+
[TypeFilter(typeof(StrictCollaboratorFilter), Arguments = new object[] {false, true})]
182189
[HttpPost]
183190
public IActionResult AddCollaboratorsToVehicle(int vehicleId, string username)
184191
{
185192
var result = _userLogic.AddCollaboratorToVehicle(vehicleId, username);
186193
return Json(result);
187194
}
188-
[TypeFilter(typeof(CollaboratorFilter))]
195+
[TypeFilter(typeof(StrictCollaboratorFilter), Arguments = new object[] { false, true })]
189196
[HttpPost]
190197
public IActionResult DeleteCollaboratorFromVehicle(int userId, int vehicleId)
191198
{

0 commit comments

Comments
 (0)