Beispiel #1
0
        private void OutputProfileSignInResult(IOutputProvider outputProvider, HttpContext context, APIRequestParams filter)
        {
            var    sr          = new System.IO.StreamReader(context.Request.InputStream);
            string jsonContent = sr.ReadToEnd();
            var    loginModel  = JsonConvert.DeserializeObject <LoginModel>(jsonContent);

            User   user             = new OCM.API.Common.UserManager().GetUser(loginModel);
            string access_token     = null;
            var    responseEnvelope = new APIResponseEnvelope();

            if (user == null)
            {
                context.Response.StatusCode = 401;
                context.Response.Flush();
                return;
            }
            else
            {
                access_token = Security.JWTAuth.GenerateEncodedJWT(user);

                /*
                 * var validatedToken = Security.JWTAuthTicket.ValidateJWTForUser(testTicket, user);
                 */
            }

            responseEnvelope.Data = new { UserProfile = user, access_token = access_token };

            outputProvider.GetOutput(context.Response.OutputStream, responseEnvelope, filter);
        }
        public ActionResult Comments()
        {
            UserManager userManager = new UserManager();

            var user = userManager.GetUser(int.Parse(Session["UserID"].ToString()));
            var list = new UserCommentManager().GetUserComments(user.ID);
            return View(list);
        }
        public ActionResult CommentDelete(int id)
        {
            var user = new UserManager().GetUser(int.Parse(Session["UserID"].ToString()));
            var commentManager = new UserCommentManager();
            var list = commentManager.GetUserComments(user.ID);

            //delete comment if owned by this user
            if (list.Where(c => c.User.ID == user.ID && c.ID == id).Any())
            {
                commentManager.DeleteComment(user.ID, id);
            }

            return RedirectToAction("Comments");
        }
        public ActionResult EditUser(OCM.API.Common.Model.User userDetails)
        {
            if (ModelState.IsValid)
            {
                var userManager = new UserManager();

                //save
                if (userManager.UpdateUserProfile(userDetails, true))
                {
                    return RedirectToAction("Users");
                }
            }

            return View(userDetails);
        }
Beispiel #5
0
        public ActionResult AddMediaItem(int id, FormCollection collection)
        {
            var user = new UserManager().GetUser((int)Session["UserID"]);
            var htmlInputProvider = new OCM.API.InputProviders.HTMLFormInputProvider();

            if (user != null)
            {
                var mediaItem = new MediaItem();
                bool uploaded = htmlInputProvider.ProcessMediaItemSubmission(this.HttpContext.ApplicationInstance.Context, ref mediaItem, user.ID);
                ViewBag.PoiId = id;
                ViewBag.UploadCompleted = true;
                return View();
            }

            return View();
        }
        public ActionResult ChangePassword()
        {
            bool requireCurrentPassword = true;

            var userManager = new UserManager();
            //allow user to set a new password without confirming old one if they haven't set a password yet
            if (!userManager.HasPassword(int.Parse(Session["UserID"].ToString())))
            {
                requireCurrentPassword = false;
            }

            if (TempData["IsCurrentPasswordRequired"] != null && (bool)TempData["IsCurrentPasswordRequired"] == false)
            {
                requireCurrentPassword = false;
            }
            return View(new PasswordChangeModel { IsCurrentPasswordRequired = requireCurrentPassword });
        }
Beispiel #7
0
        protected void Session_OnStart()
        {
            //if user has existing OCM session token, sign in automatically
            var sessionToken = GetCookie(new HttpRequestWrapper(Request), "OCMSessionToken");
            var identifier   = GetCookie(new HttpRequestWrapper(Request), "Identifier");

            if (!String.IsNullOrEmpty(sessionToken) && !String.IsNullOrEmpty(identifier))
            {
                //got token, if valid sign in users
                var userManager = new OCM.API.Common.UserManager();
                var user        = userManager.GetUserFromIdentifier(identifier, sessionToken);
                if (user != null)
                {
                    OCM.MVC.Controllers.LoginProviderController.PerformCoreLogin(user);
                }
            }
        }
        public ActionResult ChangePassword(API.Common.Model.PasswordChangeModel model)
        {
            if (ModelState.IsValid)
            {
                var passwordChanged = new UserManager().SetNewPassword(int.Parse(Session["UserID"].ToString()), model);

                model.PasswordResetFailed = !passwordChanged;

                if (passwordChanged)
                {
                    model.PasswordResetCompleted = true;
                    return RedirectToAction("Index", "Profile");
                }
            }

            return View(model);
        }
        public void DeleteMediaItem(int userId, int mediaItemId)
        {
            var dataModel = new OCMEntities();

            var item = dataModel.MediaItems.FirstOrDefault(c => c.ID == mediaItemId);

            if (item != null)
            {
                var cpID = item.ChargePointID;
                dataModel.MediaItems.Remove(item);
                dataModel.ChargePoints.Find(cpID).DateLastStatusUpdate = DateTime.UtcNow;
                dataModel.SaveChanges();

                //TODO: delete from underlying storage
                var user = new UserManager().GetUser(userId);
                AuditLogManager.Log(user, AuditEventType.DeletedItem, "{EntityType:\"Comment\", EntityID:" + mediaItemId + ",ChargePointID:" + cpID + "}", "User deleted media item");
            }
        }
        public void DeleteComment(int userId, int commentId)
        {
            var comment = DataModel.UserComments.FirstOrDefault(c=>c.ID==commentId);

            if (comment!=null){
                var cpID = comment.ChargePointID;
                DataModel.UserComments.Remove(comment);
                DataModel.ChargePoints.Find(cpID).DateLastStatusUpdate = DateTime.UtcNow;
                DataModel.SaveChanges();

                var user = new UserManager().GetUser(userId);
                AuditLogManager.Log(user, AuditEventType.DeletedItem, "{EntityType:\"Comment\",EntityID:" + commentId + ",ChargePointID:" + cpID + "}", "User deleted comment");

                //refresh cached POI data
                CacheManager.RefreshCachedPOI(cpID);

            }
        }
        public ActionResult Authenticate(LoginModel login)
        {
            User   user             = new OCM.API.Common.UserManager().GetUser(login);
            string access_token     = null;
            var    responseEnvelope = new APIResponseEnvelope();

            if (user == null)
            {
                return(Unauthorized());
            }
            else
            {
                access_token = Security.JWTAuth.GenerateEncodedJWT(user);
            }

            responseEnvelope.Data = new { UserProfile = user, access_token = access_token };

            return(Ok(responseEnvelope));
        }
Beispiel #12
0
        private async Task OutputProfileRegisterResult(IOutputProvider outputProvider, HttpContext context, APIRequestParams filter)
        {
            var    sr           = new System.IO.StreamReader(context.Request.Body);
            string jsonContent  = sr.ReadToEnd();
            var    registration = JsonConvert.DeserializeObject <RegistrationModel>(jsonContent);

            User user = null;

            if (!string.IsNullOrEmpty(registration.EmailAddress) && registration.EmailAddress.Trim().Length > 5 && registration.EmailAddress.Contains("@"))
            {
                if (!string.IsNullOrWhiteSpace(registration.Password) && registration.Password.Trim().Length > 4)
                {
                    user = new OCM.API.Common.UserManager().RegisterNewUser(registration);
                }
            }
            else
            {
                context.Response.StatusCode = 401;
            }

            string access_token     = null;
            var    responseEnvelope = new APIResponseEnvelope();

            if (user != null)
            {
                context.Response.StatusCode = 401;
                return;
            }
            else
            {
                access_token = Security.JWTAuth.GenerateEncodedJWT(user);
            }

            responseEnvelope.Data = new { UserProfile = user, access_token = access_token };

            await outputProvider.GetOutput(context, context.Response.Body, responseEnvelope, filter);
        }
Beispiel #13
0
        public ActionResult Edit(ChargePoint poi)
        {
            var refData = new POIBrowseModel();
            refData.AllowOptionalCountrySelection = false;
            ViewBag.ReferenceData = refData;

            ViewBag.ConnectionIndex = 0; //connection counter shared by equipment details
            ViewBag.EnableEditView = true;

            if (Request["editoption"] == "addconnection")
            {
                //add a placeholder for new equipment details
                if (poi.Connections == null) poi.Connections = new List<ConnectionInfo>();
                //TODO: setup defaults
                poi.Connections.Add(new ConnectionInfo());
                return View(poi);
            }

            if (Request["editoption"].ToString().StartsWith("remove-equipment"))
            {
                //TODO:remove requested connection
                //poi.Connections.Remove();
                string[] equipmentElementIDs = Request["editoption"].ToString().Split('-');
                int itemIndex = int.Parse(equipmentElementIDs[2]);
                poi.Connections.RemoveAt(itemIndex);
                return View(poi);
            }

            if (Request["editoption"] == "preview")
            {
                //preview poi
                ViewBag.EnablePreviewMode = true;

                //reset any values provided as -1 to a standard default (unknown etc)
                PrepareDefaultsForBlankSelections(poi);

                //update preview of poi with fully populated reference data
                poi = new POIManager().PreviewPopulatedPOIFromModel(poi);

                InitEditReferenceData(poi);

                return View(poi);
            }

            if (ModelState.IsValid)
            {
                try
                {
                    User user = null;

                    if (IsUserSignedIn) user = new UserManager().GetUser((int)Session["UserID"]);

                    //reset any values provided as -1 to a standard default (unknown etc)
                    PrepareDefaultsForBlankSelections(poi);

                    if (poi.AddressInfo.Country == null || poi.AddressInfo.Country.ID == -1) ModelState.AddModelError("Country", "Required");

                    //perform actual POI submission, then redirect to POI details if we can
                    int poiSubmissionID = new SubmissionManager().PerformPOISubmission(poi, user);
                    if (poiSubmissionID > -1)
                    {
                        if (poiSubmissionID > 0)
                        {
                            return RedirectToAction("Details", "POI", new { id = poiSubmissionID, status = "editsubmitted" });
                        }
                        else
                        {
                            return RedirectToAction("Index");
                        }
                    }
                    else
                    {
                        ViewBag.ValidationFailed = true;
                    }
                }
                catch
                {
                    //return View(poi);
                }
            }
            else
            {
                foreach (ModelState modelState in ViewData.ModelState.Values)
                {
                    foreach (ModelError error in modelState.Errors)
                    {
                        System.Diagnostics.Debug.WriteLine(error.ToString());
                    }
                }
            }

            ViewBag.ReferenceData = new POIBrowseModel();

            return View(poi);
        }
Beispiel #14
0
        //
        // GET: /POI/Edit/5
        public ActionResult Edit(int? id, bool createCopy = false)
        {
            if (id > 0)
            {
                ChargePoint poi = null;

                if (createCopy)
                {
                    //get version of POI with location details removed, copying equipment etc
                    poi = new POIManager().GetCopy((int)id, true);
                }
                else
                {
                    poi = new POIManager().Get((int)id);
                }

                if (poi != null)
                {
                    InitEditReferenceData(poi);

                    var refData = new POIBrowseModel();
                    ViewBag.ReferenceData = refData;
                    ViewBag.HideAdvancedInfo = true;

                    if (!createCopy)
                    {
                        try
                        {
                            var user = new UserManager().GetUser((int)Session["UserID"]);
                            if (POIManager.CanUserEditPOI(poi, user))
                            {
                                ViewBag.HideAdvancedInfo = false;
                            }
                        }
                        catch (Exception)
                        {
                            ; ; //user not signed in
                        }
                    }

                    //enable advanced edit options for full editors/admin
                    return View(poi);
                }
            }

            //no applicable poi, jump back to browse
            return RedirectToAction("Index", "POI");
        }
        public ActionResult Subscriptions()
        {
            UserManager userManager = new UserManager();

            var user = userManager.GetUser(int.Parse(Session["UserID"].ToString()));
            ViewBag.UserProfile = user;

            ViewBag.ReferenceData = new ReferenceDataManager().GetCoreReferenceData();

            var list = new UserSubscriptionManager().GetUserSubscriptions(user.ID);
            return View(list);
        }
Beispiel #16
0
        public async Task<ActionResult> Import(string providerName, bool fetchLiveData, bool performImport = false)
        {
            var stopwatch = new Stopwatch();
            stopwatch.Start();

            var importManager = new Import.ImportManager(Server.MapPath("~/Temp"));

            var providers = importManager.GetImportProviders(new ReferenceDataManager().GetDataProviders());
            var provider = providers.FirstOrDefault(p => p.GetProviderName() == providerName);
            var coreReferenceData = new ReferenceDataManager().GetCoreReferenceData();
            ((BaseImportProvider)provider).InputPath = importManager.TempFolder + "//cache_" + provider.GetProviderName() + ".dat";
            var result = await importManager.PerformImport(OCM.Import.Providers.ExportType.POIModelList, fetchLiveData, new OCM.API.Client.APICredentials(), coreReferenceData, "", provider, true);

            var systemUser = new UserManager().GetUser((int)StandardUsers.System);
            if (performImport)
            {
                //add/update/delist POIs
                await Task.Run(() =>
                {
                    importManager.UpdateImportedPOIList(result, systemUser);
                });
            }

            stopwatch.Stop();
            result.Log += "\r\nImport processing time (seconds): " + stopwatch.Elapsed.TotalSeconds;

            return View(result);
        }
Beispiel #17
0
 public ActionResult MediaDelete(int id)
 {
     var itemManager = new MediaItemManager();
     var user = new UserManager().GetUser(int.Parse(Session["UserID"].ToString()));
     itemManager.DeleteMediaItem(user.ID, id);
     return RedirectToAction("Details", "POI");
 }
Beispiel #18
0
 protected void Session_OnStart()
 {
     //if user has existing OCM session token, sign in automatically
     var sessionToken = GetCookie(new HttpRequestWrapper(Request), "OCMSessionToken");
     var identifier = GetCookie(new HttpRequestWrapper(Request), "Identifier");
     if (!String.IsNullOrEmpty(sessionToken) && !String.IsNullOrEmpty(identifier))
     {
         //got token, if valid sign in users
         var userManager = new OCM.API.Common.UserManager();
         var user = userManager.GetUserFromIdentifier(identifier, sessionToken);
         if (user != null)
         {
             OCM.MVC.Controllers.LoginProviderController.PerformCoreLogin(user);
         }
     }
 }
        public ActionResult Edit(User updateProfile)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (Session["UserID"] != null)
                    {
                        // TODO: Add update logic here
                        var userManager = new UserManager();
                        var user = userManager.GetUser((int)Session["UserID"]);

                        bool updatedOK = false;
                        if (user.ID == updateProfile.ID)
                        {
                            updatedOK = userManager.UpdateUserProfile(updateProfile, false);
                        }

                        if (updatedOK)
                        {
                            return RedirectToAction("Index");
                        }
                        else
                        {
                            TempData["UpdateFailed"] = true;
                        }
                    }

                    return View();
                }
                catch
                {
                    return View();
                }
            }
            return View(updateProfile);
        }
        public ActionResult Edit()
        {
            if (Session["UserID"] != null)
            {
                UserManager userManager = new UserManager();
                var user = userManager.GetUser(int.Parse(Session["UserID"].ToString()));

                return View(user);
            }
            else return View();
        }
        public ActionResult Media()
        {
            UserManager userManager = new UserManager();

            var user = userManager.GetUser(int.Parse(Session["UserID"].ToString()));
            var list = new MediaItemManager().GetUserMediaItems(user.ID);
            return View(list);
        }
        public ActionResult MediaDelete(int id)
        {
            var user = new UserManager().GetUser(int.Parse(Session["UserID"].ToString()));
            var itemManager = new MediaItemManager();
            var list = itemManager.GetUserMediaItems(user.ID);

            //delete item if owned by this user
            if (list.Where(c => c.User.ID == user.ID && c.ID == id).Any())
            {
                itemManager.DeleteMediaItem(user.ID, id);
            }

            return RedirectToAction("Media");
        }
        public ActionResult View(int id)
        {
            UserManager userManager = new UserManager();
            var user = userManager.GetUser(id);

            ViewBag.CountryList = new SelectList(new ReferenceDataManager().GetCountries(true), "ID", "Title");
            return View(user);
        }
Beispiel #24
0
 public ActionResult Comment(POIViewModel model)
 {
     var comment = model.NewComment;
     if (ModelState.IsValid)
     {
         try
         {
             var user = new UserManager().GetUser((int)Session["UserID"]);
             if (comment.Rating == 0) comment.Rating = null;
             if (new SubmissionManager().PerformSubmission(comment, user) > 0)
             {
                 if (comment.ChargePointID > 0)
                 {
                     return RedirectToAction("Details", "POI", new { id = comment.ChargePointID });
                 }
                 else
                 {
                     return RedirectToAction("Index");
                 }
             }
         }
         catch
         {
             //return View(poi);
         }
     }
     else
     {
         foreach (ModelState modelState in ViewData.ModelState.Values)
         {
             foreach (ModelError error in modelState.Errors)
             {
                 System.Diagnostics.Debug.WriteLine(error.ToString());
             }
         }
         return View("AddComment", model);
     }
     return RedirectToAction("Index");
 }
        public ActionResult ConfirmPasswordReset(string token, string email)
        {
            //check token is valid for email, then sign in user and go to password change
            var userManager = new UserManager();

            var user = userManager.GetUserFromResetToken(email, token);

            if (user != null)
            {
                userManager.AssignNewSessionToken(user.ID, true);

                //sign in user
                PerformCoreLogin(user);

                //proceed to password change
                TempData["IsCurrentPasswordRequired"] = false;

                return RedirectToAction("ChangePassword", "Profile");
            }

            return View();
        }
Beispiel #26
0
 public ActionResult CommentDelete(int id)
 {
     var commentManager = new UserCommentManager();
     var user = new UserManager().GetUser(int.Parse(Session["UserID"].ToString()));
     commentManager.DeleteComment(user.ID, id);
     return RedirectToAction("Index");
 }
 public ActionResult PasswordReset(OCM.API.Common.Model.PasswordResetRequestModel model)
 {
     if (ModelState.IsValid)
     {
         //send confirmation email
         bool resetInitiated = new UserManager().BeginPasswordReset(model.EmailAddress);
         if (resetInitiated)
         {
             model.ResetInitiated = true;
         }
         else
         {
             model.ResetInitiated = false;
             model.IsUnknownAccount = true;
         }
     }
     return View(model);
 }
Beispiel #28
0
 public ActionResult Users()
 {
     var userList = new UserManager().GetUsers().OrderByDescending(u => u.DateCreated);
     return View(userList);
 }
        public ActionResult Register(OCM.API.Common.Model.RegistrationModel model)
        {
            if (ModelState.IsValid)
            {
                //register as new user, check email is valid first
                var userManager = new UserManager();
                var user = userManager.RegisterNewUser(model);

                if (user != null)
                {
                    return RedirectToAction("BeginLogin", "LoginProvider");
                }
                else
                {
                    model.RegistrationFailed = true;
                }
            }

            return View(model);
        }
Beispiel #30
0
 public ActionResult EditUser(int id)
 {
     var user = new UserManager().GetUser(id);
     return View(user);
 }
        public ActionResult SignOut()
        {
            if (Session["UserID"] != null)
            {
                // assign fresh session token for next login
                var userManager = new UserManager();
                userManager.AssignNewSessionToken((int)Session["UserID"]);
            }

            //clear cookies & set new session token
            UpdateCookie(Response, "IdentityProvider", "");
            UpdateCookie(Response, "Identifier", "");
            UpdateCookie(Response, "Username", "");
            UpdateCookie(Response, "OCMSessionToken", "");
            UpdateCookie(Response, "AccessPermissions", "");

            //clear session
            Session.Abandon();

            return RedirectToAction("Index", "Home");
        }
        public ActionResult BeginLogin(OCM.API.Common.Model.LoginModel loginModel)
        {
            if (ModelState.IsValid)
            {
                var userManager = new UserManager();

                try
                {
                    var user = userManager.GetUser(loginModel);
                    if (user != null)
                    {
                        return ProcessLoginResult(user.Identifier, user.IdentityProvider, user.Username, user.EmailAddress);
                    }
                    else
                    {
                        ViewBag.InvalidLogin = true;
                    }
                }
                catch (UserManager.PasswordNotSetException)
                {
                    return RedirectToAction("PasswordReset", new { emailAddress = loginModel.EmailAddress });
                }
            }

            ViewBag.LoginProviders = OAuthWebSecurity.RegisteredClientData;
            return View(loginModel);
        }
        public void ProcessEditQueueItem(int id, bool publishEdit, int userId)
        {
            //prepare poi details
            int updatePOIId = 0;
            var queueItem = DataModel.EditQueueItems.FirstOrDefault(e => e.ID == id);

            if (queueItem != null && queueItem.IsProcessed == false)
            {
                if (queueItem.EntityType.ID == (int)StandardEntityTypes.POI)
                {
                    //check current user is authorized to approve edits for this POIs country
                    bool hasEditPermission = false;
                    var editPOI = DeserializePOIFromJSON(queueItem.EditData);
                    var userProfile = new UserManager().GetUser(userId);
                    if (userProfile != null)
                    {
                        if (UserManager.HasUserPermission(userProfile, editPOI.AddressInfo.CountryID, PermissionLevel.Editor))
                        {
                            hasEditPermission = true;
                        }
                    }

                    //processing a POI add/edit
                    if (hasEditPermission)
                    {
                        if (publishEdit)
                        {
                            //get diff between previous and edit

                            POIManager poiManager = new POIManager();
                            Model.ChargePoint poiA = DeserializePOIFromJSON(queueItem.PreviousData);
                            Model.ChargePoint poiB = DeserializePOIFromJSON(queueItem.EditData);

                            bool poiUpdateRequired = false;

                            if (poiA != null)
                            {
                                //this is an edit, load the latest version of the POI as version 'A'
                                poiA = poiManager.Get(poiA.ID);
                                if (poiManager.HasDifferences(poiA, poiB))
                                {
                                    poiUpdateRequired = true;
                                }
                            }

                            //save poi update
                            //if its an edit, load the original details before applying the change
                            if (poiUpdateRequired)
                            {
                                //updates to externally provided POIs require old version to be superseded (archived) first
                                if (poiA != null && poiA.DataProviderID != (int)StandardDataProviders.OpenChargeMapContrib)
                                {
                                    poiManager.SupersedePOI(DataModel, poiA, poiB);
                                }
                            }

                            //set/update cp properties from simple model to data model
                            var poiData = poiManager.PopulateChargePoint_SimpleToData(poiB, DataModel);

                            //set status type to published if previously unset
                            if (poiData.SubmissionStatusTypeID == null)
                            {
                                poiData.SubmissionStatusType = DataModel.SubmissionStatusTypes.First(s => s.ID == (int)StandardSubmissionStatusTypes.Submitted_Published);
                            }

                            poiData.DateLastStatusUpdate = DateTime.UtcNow;

                            //publish edit
                            DataModel.SaveChanges();

                            updatePOIId = poiData.ID;

                            //attribute submitter with reputation points
                            if (queueItem.UserID != null)
                            {
                                new UserManager().AddReputationPoints((int)queueItem.UserID, 1);
                            }
                        }

                        //update edit queue item as processed
                        queueItem.IsProcessed = true;
                        queueItem.ProcessedByUser = DataModel.Users.FirstOrDefault(u => u.ID == userId);
                        queueItem.DateProcessed = DateTime.UtcNow;
                        DataModel.SaveChanges();

                        //TODO: also award processing editor with reputation points if they are approving someone elses edit and they are not Admin

                        //Refresh POI cache
                        Task cacheRefresh = CacheManager.RefreshCachedPOI(updatePOIId);
                    }
                }
            }
        }