From 99c0d3a1e3a6108a65ea9d518765e5cd1bca1b03 Mon Sep 17 00:00:00 2001 From: Uncled1023 Date: Fri, 17 Jun 2016 16:10:12 -0700 Subject: [PATCH] Added transfer properties to Pastes for password transfers. --- GitVersionConfig.yaml => GitVersion.yaml | 0 Teknik.sln | 2 +- Teknik/Areas/Paste/Controllers/PasteController.cs | 14 ++++++++++++-- Teknik/Areas/Paste/Models/Paste.cs | 3 +++ Teknik/Areas/User/Models/User.cs | 3 ++- Teknik/Areas/User/Utility/UserHelper.cs | 8 ++++---- Teknik/{Areas/User => }/Models/TransferTypes.cs | 8 ++++++-- Teknik/Teknik.csproj | 2 +- 8 files changed, 29 insertions(+), 11 deletions(-) rename GitVersionConfig.yaml => GitVersion.yaml (100%) rename Teknik/{Areas/User => }/Models/TransferTypes.cs (65%) diff --git a/GitVersionConfig.yaml b/GitVersion.yaml similarity index 100% rename from GitVersionConfig.yaml rename to GitVersion.yaml diff --git a/Teknik.sln b/Teknik.sln index f2c9de9..c2c9540 100644 --- a/Teknik.sln +++ b/Teknik.sln @@ -7,7 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Teknik", "Teknik\Teknik.csp EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{725ABF52-FD44-4682-81BB-D93598787643}" ProjectSection(SolutionItems) = preProject - GitVersionConfig.yaml = GitVersionConfig.yaml + GitVersion.yaml = GitVersion.yaml README.md = README.md EndProjectSection EndProject diff --git a/Teknik/Areas/Paste/Controllers/PasteController.cs b/Teknik/Areas/Paste/Controllers/PasteController.cs index d58b811..c2b1dc0 100644 --- a/Teknik/Areas/Paste/Controllers/PasteController.cs +++ b/Teknik/Areas/Paste/Controllers/PasteController.cs @@ -65,8 +65,18 @@ namespace Teknik.Areas.Paste.Controllers // The paste has a password set if (!string.IsNullOrEmpty(paste.HashedPassword)) { - string hashedPass = Helpers.SHA384.Hash(paste.Key, password).ToHex(); - if (string.IsNullOrEmpty(password) || hashedPass != paste.HashedPassword) + byte[] passBytes = Helpers.SHA384.Hash(paste.Key, password); + string hash = passBytes.ToHex(); + // We need to convert old pastes to the new password scheme + if (paste.Transfers.ToList().Exists(t => t.Type == TransferTypes.ASCIIPassword)) + { + hash = Encoding.ASCII.GetString(passBytes); + // Remove the transfer types + paste.Transfers.Clear(); + db.Entry(paste).State = EntityState.Modified; + db.SaveChanges(); + } + if (string.IsNullOrEmpty(password) || hash != paste.HashedPassword) { PasswordViewModel passModel = new PasswordViewModel(); passModel.Url = url; diff --git a/Teknik/Areas/Paste/Models/Paste.cs b/Teknik/Areas/Paste/Models/Paste.cs index 78609a7..215ac95 100644 --- a/Teknik/Areas/Paste/Models/Paste.cs +++ b/Teknik/Areas/Paste/Models/Paste.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Teknik.Areas.Users.Models; using Teknik.Attributes; +using Teknik.Models; namespace Teknik.Areas.Paste.Models { @@ -47,5 +48,7 @@ namespace Teknik.Areas.Paste.Models public int MaxViews { get; set; } public int Views { get; set; } + + public virtual ICollection Transfers { get; set; } } } diff --git a/Teknik/Areas/User/Models/User.cs b/Teknik/Areas/User/Models/User.cs index 380f7c7..ab3cd75 100644 --- a/Teknik/Areas/User/Models/User.cs +++ b/Teknik/Areas/User/Models/User.cs @@ -4,6 +4,7 @@ using Microsoft.AspNet.Identity.EntityFramework; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using Teknik.Attributes; +using Teknik.Models; namespace Teknik.Areas.Users.Models { @@ -22,7 +23,7 @@ namespace Teknik.Areas.Users.Models public bool TransferAccount { get; set; } - public List Transfers { get; set; } + public virtual ICollection Transfers { get; set; } public DateTime JoinDate { get; set; } diff --git a/Teknik/Areas/User/Utility/UserHelper.cs b/Teknik/Areas/User/Utility/UserHelper.cs index 73170e9..eca719a 100644 --- a/Teknik/Areas/User/Utility/UserHelper.cs +++ b/Teknik/Areas/User/Utility/UserHelper.cs @@ -109,19 +109,19 @@ namespace Teknik.Areas.Users.Utility try { string username = user.Username.ToLower(); - if (user.Transfers.Exists(t => t.Type == TransferTypes.CaseSensitivePassword)) + if (user.Transfers.ToList().Exists(t => t.Type == TransferTypes.CaseSensitivePassword)) { username = user.Username; } byte[] hashBytes = SHA384.Hash(username, password); string hash = hashBytes.ToHex(); - if (user.Transfers.Exists(t => t.Type == TransferTypes.ASCIIPassword)) + if (user.Transfers.ToList().Exists(t => t.Type == TransferTypes.ASCIIPassword)) { hash = Encoding.ASCII.GetString(hashBytes); } - if (user.Transfers.Exists(t => t.Type == TransferTypes.Sha256Password)) + if (user.Transfers.ToList().Exists(t => t.Type == TransferTypes.Sha256Password)) { hash = SHA256.Hash(password, config.Salt1, config.Salt2); } @@ -256,7 +256,7 @@ namespace Teknik.Areas.Users.Utility { try { - List transfers = user.Transfers; + List transfers = user.Transfers.ToList(); for (int i = 0; i < transfers.Count; i++) { TransferType transfer = transfers[i]; diff --git a/Teknik/Areas/User/Models/TransferTypes.cs b/Teknik/Models/TransferTypes.cs similarity index 65% rename from Teknik/Areas/User/Models/TransferTypes.cs rename to Teknik/Models/TransferTypes.cs index 920f327..4ba0b73 100644 --- a/Teknik/Areas/User/Models/TransferTypes.cs +++ b/Teknik/Models/TransferTypes.cs @@ -3,8 +3,10 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; +using Teknik.Areas.Users.Models; +using Teknik.Areas.Paste.Models; -namespace Teknik.Areas.Users.Models +namespace Teknik.Models { public enum TransferTypes { @@ -19,6 +21,8 @@ namespace Teknik.Areas.Users.Models public TransferTypes Type { get; set; } - public List Users { get; set; } + public virtual ICollection Users { get; set; } + + public virtual ICollection Pastes { get; set; } } } \ No newline at end of file diff --git a/Teknik/Teknik.csproj b/Teknik/Teknik.csproj index b5e93a5..1cabe56 100644 --- a/Teknik/Teknik.csproj +++ b/Teknik/Teknik.csproj @@ -211,7 +211,7 @@ - +