This commit is contained in:
2021-02-11 22:24:05 +00:00
parent 0843e24bc5
commit 498759f93c

View File

@@ -279,7 +279,8 @@ namespace AyaNova.Biz
// //
// internal async Task<User> PutAsync(User putObject)
// {
// User dbObject = await ct.User.SingleOrDefaultAsync(z => z.Id == putObject.Id);
// //todo: update to use the new PUT methodology
// var dbObject = await GetAsync(putObject.Id, false);
// if (dbObject == null)
// {
// AddError(ApiErrorCode.NOT_FOUND, "id");
@@ -359,13 +360,17 @@ namespace AyaNova.Biz
//
internal async Task<User> PutAsync(User putObject)
{
//todo: update to use the new PUT methodology
var dbObject = await GetAsync(putObject.Id, false);
if (dbObject == null)
{
AddError(ApiErrorCode.NOT_FOUND, "id");
return null;
}
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
//Also used for Contacts (customer type user or ho type user)
//by users with no User right but with Customer rights so need to double check here
if (
@@ -377,42 +382,33 @@ namespace AyaNova.Biz
return null;
}
User SnapshotOfOriginalDBObj = new User();
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
CopyObject.Copy(putObject, dbObject, "Id, Salt, CurrentAuthToken, LoginKey, DlKey, DlKeyExpire");
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
await ValidateAsync(putObject, dbObject);
if (HasErrors) return null;
var OriginalSalt = dbObject.Salt;
var OriginalPW = dbObject.Password;
var OriginalLogin = dbObject.Login;
ct.Replace(dbObject, putObject);
//NOTE: It's valid to call this without intending to change login or password (null values)
//Is the user updating the password?
if (!string.IsNullOrWhiteSpace(putObject.Password))
{
//YES password is being updated:
dbObject.Password = Hasher.hash(SnapshotOfOriginalDBObj.Salt, putObject.Password);
putObject.Password = Hasher.hash(OriginalSalt, putObject.Password);
}
else
{
//No, use the snapshot password value
dbObject.Password = SnapshotOfOriginalDBObj.Password;
dbObject.Salt = SnapshotOfOriginalDBObj.Salt;
putObject.Password = OriginalPW;
putObject.Salt = OriginalSalt;
}
//Updating login?
if (!string.IsNullOrWhiteSpace(putObject.Login))
{
//YES Login is being updated:
dbObject.Login = putObject.Login;
}
else
if (string.IsNullOrWhiteSpace(putObject.Login))
{
//No, use the original value
dbObject.Login = SnapshotOfOriginalDBObj.Login;
putObject.Login = OriginalLogin;
}
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
await ValidateAsync(dbObject, SnapshotOfOriginalDBObj);
if (HasErrors) return null;
try
{
await ct.SaveChangesAsync();
@@ -426,14 +422,14 @@ namespace AyaNova.Biz
return null;
}
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
await SearchIndexAsync(dbObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj);
return dbObject;
await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return putObject;
}
/////////////////////////////////////////////
//PASSWORD
//
@@ -600,7 +596,7 @@ namespace AyaNova.Biz
//Note: will cascade delete notifyevent, and notification automatically
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from anotifysubscription where userid = {dbObject.Id}");
//personal datalist options
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistsavedfilter where public = {false} and userid = {dbObject.Id}");
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistsavedfilter where public = {false} and userid = {dbObject.Id}");
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistcolumnview where userid = {dbObject.Id}");
//Dashboard view
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adashboardview where userid = {dbObject.Id}");