diff --git a/Teknik/App_Start/BundleConfig.cs b/Teknik/App_Start/BundleConfig.cs
index 9851cfa..8bc0f70 100644
--- a/Teknik/App_Start/BundleConfig.cs
+++ b/Teknik/App_Start/BundleConfig.cs
@@ -30,7 +30,7 @@ namespace Teknik
bundles.Add(new ScriptBundle("~/bundles/common").Include(
"~/Scripts/common.js"));
- bundles.Add(new StyleBundle("~/Content/css").Include(
+ bundles.Add(new StyleBundle("~/Content/CSS/Common").Include(
"~/Content/CSS/bootstrap.css",
"~/Content/CSS/font-awesome.css",
"~/Content/CSS/Site.css"));
diff --git a/Teknik/Models/Blog.cs b/Teknik/Areas/Blog/Models/Blog.cs
similarity index 78%
rename from Teknik/Models/Blog.cs
rename to Teknik/Areas/Blog/Models/Blog.cs
index d8f948d..bc65c8b 100644
--- a/Teknik/Models/Blog.cs
+++ b/Teknik/Areas/Blog/Models/Blog.cs
@@ -1,7 +1,8 @@
using System;
using System.Collections.Generic;
+using Teknik.Areas.Profile.Models;
-namespace Teknik.Models
+namespace Teknik.Areas.Blog.Models
{
public class Blog
{
diff --git a/Teknik/Models/Post.cs b/Teknik/Areas/Blog/Models/Post.cs
similarity index 93%
rename from Teknik/Models/Post.cs
rename to Teknik/Areas/Blog/Models/Post.cs
index b362044..57a802c 100644
--- a/Teknik/Models/Post.cs
+++ b/Teknik/Areas/Blog/Models/Post.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
-namespace Teknik.Models
+namespace Teknik.Areas.Blog.Models
{
public class Post
{
diff --git a/Teknik/Areas/Home/Controllers/HomeController.cs b/Teknik/Areas/Home/Controllers/HomeController.cs
index c9eeb55..f927aca 100644
--- a/Teknik/Areas/Home/Controllers/HomeController.cs
+++ b/Teknik/Areas/Home/Controllers/HomeController.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
+using Teknik.Areas.Blog.Models;
using Teknik.Controllers;
using Teknik.Models;
diff --git a/Teknik/Areas/Home/Views/Home/Index.cshtml b/Teknik/Areas/Home/Views/Home/Index.cshtml
index 2f9523b..e6f023b 100644
--- a/Teknik/Areas/Home/Views/Home/Index.cshtml
+++ b/Teknik/Areas/Home/Views/Home/Index.cshtml
@@ -1,4 +1,4 @@
-@using Teknik.Models
+@using Teknik.Areas.Blog.Models
diff --git a/Teknik/Areas/Profile/Controllers/ProfileController.cs b/Teknik/Areas/Profile/Controllers/ProfileController.cs
new file mode 100644
index 0000000..57aedb0
--- /dev/null
+++ b/Teknik/Areas/Profile/Controllers/ProfileController.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.Mvc;
+using System.Web.Security;
+using Teknik.Areas.Profile.ViewModels;
+using Teknik.Controllers;
+using Teknik.Models;
+using Teknik.ViewModels;
+
+namespace Teknik.Areas.Profile.Controllers
+{
+ public class ProfileController : DefaultController
+ {
+ private TeknikEntities db = new TeknikEntities();
+
+ // GET: Profile/Profile
+ public ActionResult Index()
+ {
+ ViewBag.Title = Config.Title + " - Profile";
+ ViewBag.Message = "View Your Profile";
+
+ return View();
+ }
+
+ [HttpGet]
+ [AllowAnonymous]
+ // GET: Profile
+ public ActionResult Login()
+ {
+ return View();
+ }
+
+ [HttpPost]
+ [AllowAnonymous]
+ public ActionResult Login(LoginViewModel model)
+ {
+ if (ModelState.IsValid)
+ {
+ if (model.IsValid())
+ {
+ FormsAuthentication.SetAuthCookie(model.Username, model.RememberMe);
+ return Json(new { result = "true" });
+ }
+ }
+ return Json(new { error = "Invalid User name or Password." });
+ }
+
+ public ActionResult Logout()
+ {
+ FormsAuthentication.SignOut();
+ return RedirectToAction("Index", "Home", new { Area = "Home" });
+ }
+
+ [HttpPost]
+ [AllowAnonymous]
+ public ActionResult Register(RegisterViewModel model)
+ {
+ if (ModelState.IsValid)
+ {
+ var foundUser = db.Users.Where(b => b.Username == model.Username);
+ if (foundUser.Any())
+ {
+ return Json(new { error = "That username already exists." });
+ }
+ if (model.Password != model.ConfirmPassword)
+ {
+ return Json(new { error = "Passwords must match." });
+ }
+ if (model.Insert())
+ {
+ return RedirectToAction("Login", "Profile", new LoginViewModel { Username = model.Username, Password = model.Password });
+ }
+ return Json(new { error = "You must include all fields." });
+ }
+ return Json(new { error = "You must include all fields." });
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Teknik/Areas/Profile/Models/AuthUser.cs b/Teknik/Areas/Profile/Models/AuthUser.cs
new file mode 100644
index 0000000..b5eb6ac
--- /dev/null
+++ b/Teknik/Areas/Profile/Models/AuthUser.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNet.Identity.EntityFramework;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Teknik.Areas.Profile.Models
+{
+ public class AuthUser : IdentityUser
+ {
+ public User User { get; set; }
+ }
+}
diff --git a/Teknik/Areas/Profile/Models/Group.cs b/Teknik/Areas/Profile/Models/Group.cs
new file mode 100644
index 0000000..a4c6576
--- /dev/null
+++ b/Teknik/Areas/Profile/Models/Group.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Teknik.Areas.Profile.Models
+{
+ public class Group
+ {
+ public int GroupId { get; set; }
+
+ public string Name { get; set; }
+
+ public string Description { get; set; }
+
+ public List Roles { get; set; }
+ }
+}
diff --git a/Teknik/Areas/Profile/Models/PermissionTarget.cs b/Teknik/Areas/Profile/Models/PermissionTarget.cs
new file mode 100644
index 0000000..c07d0c8
--- /dev/null
+++ b/Teknik/Areas/Profile/Models/PermissionTarget.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Teknik.Areas.Profile.Models
+{
+ public enum PermissionTarget
+ {
+ Blog,
+ User,
+ Profile
+ }
+}
diff --git a/Teknik/Areas/Profile/Models/PermissionType.cs b/Teknik/Areas/Profile/Models/PermissionType.cs
new file mode 100644
index 0000000..c171214
--- /dev/null
+++ b/Teknik/Areas/Profile/Models/PermissionType.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Teknik.Areas.Profile.Models
+{
+ public enum PermissionType
+ {
+ Add,
+ Edit,
+ Delete
+ }
+}
diff --git a/Teknik/Areas/Profile/Models/Role.cs b/Teknik/Areas/Profile/Models/Role.cs
new file mode 100644
index 0000000..ceb76af
--- /dev/null
+++ b/Teknik/Areas/Profile/Models/Role.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Teknik.Areas.Profile.Models
+{
+ public class Role
+ {
+ public int RoleId { get; set; }
+
+ public string Name { get; set; }
+
+ public string Description { get; set; }
+
+ public PermissionType Permission { get; set; }
+
+ public PermissionTarget Target { get; set; }
+ }
+}
diff --git a/Teknik/Models/User.cs b/Teknik/Areas/Profile/Models/User.cs
similarity index 78%
rename from Teknik/Models/User.cs
rename to Teknik/Areas/Profile/Models/User.cs
index 39170ea..2637160 100644
--- a/Teknik/Models/User.cs
+++ b/Teknik/Areas/Profile/Models/User.cs
@@ -1,8 +1,9 @@
using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNet.Identity.EntityFramework;
+using System.Collections.Generic;
-namespace Teknik.Models
+namespace Teknik.Areas.Profile.Models
{
public class User
{
@@ -16,12 +17,15 @@ namespace Teknik.Models
public DateTime LastSeen { get; set; }
+ public List Groups { get; set; }
+
public User()
{
Username = String.Empty;
HashedPassword = String.Empty;
JoinDate = DateTime.Now;
LastSeen = DateTime.Now;
+ Groups = new List();
}
}
}
\ No newline at end of file
diff --git a/Teknik/Areas/Profile/Models/UserIdentity.cs b/Teknik/Areas/Profile/Models/UserIdentity.cs
new file mode 100644
index 0000000..386041b
--- /dev/null
+++ b/Teknik/Areas/Profile/Models/UserIdentity.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Teknik.Areas.Profile.Models
+{
+ public class UserIdentity : User
+ {
+ }
+}
diff --git a/Teknik/Areas/Profile/ProfileAreaRegistration.cs b/Teknik/Areas/Profile/ProfileAreaRegistration.cs
new file mode 100644
index 0000000..a37c8b5
--- /dev/null
+++ b/Teknik/Areas/Profile/ProfileAreaRegistration.cs
@@ -0,0 +1,33 @@
+using System.Web.Mvc;
+
+namespace Teknik.Areas.Profile
+{
+ public class ProfileAreaRegistration : AreaRegistration
+ {
+ public override string AreaName
+ {
+ get
+ {
+ return "Profile";
+ }
+ }
+
+ public override void RegisterArea(AreaRegistrationContext context)
+ {
+ context.MapSubdomainRoute(
+ "Profile_dev", // Route name
+ "dev",
+ "Profile/{controller}/{action}", // URL with parameters
+ new { controller = "Profile", action = "Index" }, // Parameter defaults
+ new[] { typeof(Controllers.ProfileController).Namespace }
+ );
+ context.MapSubdomainRoute(
+ "Profile_default", // Route name
+ "profile",
+ "{controller}/{action}", // URL with parameters
+ new { controller = "Profile", action = "Index" }, // Parameter defaults
+ new[] { typeof(Controllers.ProfileController).Namespace }
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/Teknik/ViewModels/LoginViewModel.cs b/Teknik/Areas/Profile/ViewModels/LoginViewModel.cs
similarity index 96%
rename from Teknik/ViewModels/LoginViewModel.cs
rename to Teknik/Areas/Profile/ViewModels/LoginViewModel.cs
index 492cdcb..199e0f9 100644
--- a/Teknik/ViewModels/LoginViewModel.cs
+++ b/Teknik/Areas/Profile/ViewModels/LoginViewModel.cs
@@ -7,7 +7,7 @@ using System.Web.Security;
using Teknik.Helpers;
using Teknik.Models;
-namespace Teknik.ViewModels
+namespace Teknik.Areas.Profile.ViewModels
{
public class LoginViewModel
{
diff --git a/Teknik/ViewModels/RegisterViewModel.cs b/Teknik/Areas/Profile/ViewModels/RegisterViewModel.cs
similarity index 93%
rename from Teknik/ViewModels/RegisterViewModel.cs
rename to Teknik/Areas/Profile/ViewModels/RegisterViewModel.cs
index 31523ae..c2d8cae 100644
--- a/Teknik/ViewModels/RegisterViewModel.cs
+++ b/Teknik/Areas/Profile/ViewModels/RegisterViewModel.cs
@@ -1,9 +1,10 @@
using System;
using System.ComponentModel.DataAnnotations;
+using Teknik.Areas.Profile.Models;
using Teknik.Helpers;
using Teknik.Models;
-namespace Teknik.ViewModels
+namespace Teknik.Areas.Profile.ViewModels
{
public class RegisterViewModel
{
diff --git a/Teknik/Areas/Profile/Views/Profile/Index.cshtml b/Teknik/Areas/Profile/Views/Profile/Index.cshtml
new file mode 100644
index 0000000..49b7aaf
--- /dev/null
+++ b/Teknik/Areas/Profile/Views/Profile/Index.cshtml
@@ -0,0 +1 @@
+@using Teknik.Models
diff --git a/Teknik/Views/Profile/Login.cshtml b/Teknik/Areas/Profile/Views/Profile/Login.cshtml
similarity index 89%
rename from Teknik/Views/Profile/Login.cshtml
rename to Teknik/Areas/Profile/Views/Profile/Login.cshtml
index 634ab2a..edeac94 100644
--- a/Teknik/Views/Profile/Login.cshtml
+++ b/Teknik/Areas/Profile/Views/Profile/Login.cshtml
@@ -1,6 +1,6 @@
-@model Teknik.ViewModels.LoginViewModel
+@model Teknik.Areas.Profile.ViewModels.LoginViewModel
-