Current Situation:
I'm doing a simple MVC site for keeping journals as a personal project.
My concern is I'm trying to keep the interaction between the pages and the classes simplistic. Where I run into issues is the password field. My setter encrypts the password, so the getter retrieves the encrypted password.
public class JournalBook
{
private IEncryptor _encryptor { get; set; }
private String _password { get; set; }
public Int32 id { get; set; }
public String name { get; set; }
public String description { get; set; }
public String password
{
get
{
return this._password;
}
set
{
this.setPassword(this._password, value, value);
}
}
public List<Journal> journals { get; set; }
public DateTime created { get; set; }
public DateTime lastModified { get; set; }
public Boolean passwordProtected
{
get
{
return this.password != null && this.password != String.Empty;
}
}
...
}
I'm currently using model-binding to submit changes or create new JournalBooks (like below). The problem arises that in the code below book.password is always null, I'm pretty sure this is because of the custom setter.
[HttpPost]
public ActionResult Create(JournalBook book)
{
// Create the JournalBook if not null.
if (book != null)
this.JournalBooks.Add(book);
return RedirectToAction("Index");
}
Question(s):
Should I be handling this not in the property's getter/setter?
Is there a pattern or architecture that allows for model-binding or another simple method when properties need to have custom getters/setters to manipulate the data?
To summarize, how can I handle the password storing with encryption such that I have the following,
Robust architecture
I don't store the password as plaintext.
Submitting a new or modified JournalBook is as easy as default model-binding (or close to it).