public bool ProcessEquipmentSubmission(HttpContext context, ref OCM.API.Common.Model.ChargePoint cp) { System.IO.StreamReader sr = new System.IO.StreamReader(context.Request.InputStream); //TODO: handle encoding (UTF etc) correctly string responseContent = sr.ReadToEnd().Trim(); string jsonString = responseContent; try { JObject o = JObject.Parse(jsonString); JsonSerializer serializer = new JsonSerializer(); cp = (Common.Model.ChargePoint)serializer.Deserialize(new JTokenReader(o), typeof(Common.Model.ChargePoint)); //validate cp submission if (POIManager.IsValid(cp)) { return true; } else { return false; } } catch (Exception exp) { System.Diagnostics.Debug.WriteLine(exp); //submission failed return false; } }
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); }
public static void PerformCoreLogin(OCM.API.Common.Model.User userDetails) { string permissions = (userDetails.Permissions != null ? userDetails.Permissions : ""); var session = System.Web.HttpContext.Current.Session; var response = new HttpResponseWrapper(System.Web.HttpContext.Current.Response); UpdateCookie(response, "IdentityProvider", userDetails.IdentityProvider); UpdateCookie(response, "Identifier", userDetails.Identifier); UpdateCookie(response, "Username", userDetails.Username); UpdateCookie(response, "OCMSessionToken", userDetails.CurrentSessionToken); UpdateCookie(response, "AccessPermissions", permissions); session["IdentityProvider"] = userDetails.IdentityProvider; session["Identifier"] = userDetails.Identifier; session["Username"] = userDetails.Username; session["UserID"] = userDetails.ID; if (UserManager.IsUserAdministrator(userDetails)) { session["IsAdministrator"] = true; } }
public DataQualityReport GetDataQualityReport(OCM.API.Common.Model.ChargePoint poi) { DataQualityReport report = new DataQualityReport(); report.POIReports.Add(CheckPOIDataQuality(poi)); return report; }
/// <summary> /// For given POI, return data quality report and supporting analysis results /// </summary> /// <param name="poi"></param> /// <returns></returns> public POIDataQualityReport CheckPOIDataQuality(OCM.API.Common.Model.ChargePoint poi) { var report = new POIDataQualityReport(); report.POI = poi; DateTime recentUpdateThreshold = DateTime.UtcNow.AddMonths(-6); if ( (poi.DateLastConfirmed.HasValue && !(poi.DateLastConfirmed.Value > recentUpdateThreshold)) || (poi.UserComments!=null && poi.UserComments.Any(u=>u.CheckinStatusType!=null && u.CheckinStatusType.IsPositive==true && u.DateCreated>recentUpdateThreshold)) || (poi.MediaItems != null && poi.MediaItems.Any(u => u.DateCreated > recentUpdateThreshold)) ) { //has either a recent datelastconfirmed value or a recent positive checkin report.ReportItems.Add(new DataQualityReportItem { Category = "User Feedback", Comment = "Has recent user verification", IsPositive = true }); } else { //low quality score for date last confirmed report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "User Feedback", Comment = "No recent user verification.", IsPositive = false }); } if (poi.UserComments == null || (poi.UserComments != null && !poi.UserComments.Any())) { //low quality score for comments report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "User Feedback", Comment = "No comments or check-ins", IsPositive = false }); } else { report.ReportItems.Add(new DataQualityReportItem { Category = "User Feedback", Comment = "Has comments or check-ins", IsPositive = true }); } if (poi.MediaItems == null || (poi.MediaItems != null && !poi.MediaItems.Any())) { //low quality score for photos report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "User Feedback", Comment = "No photos", IsPositive = false }); } else { report.ReportItems.Add(new DataQualityReportItem { Category = "User Feedback", Comment = "Has photos", IsPositive = true }); } if (poi.UsageTypeID == null || (poi.UsageTypeID != null && poi.UsageType.ID == 0)) { //low quality score for usage type report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "Data Completeness", Comment = "Unknown Usage Type", IsPositive = false }); } else { report.ReportItems.Add(new DataQualityReportItem { Category = "Data Completeness", Comment = "Usage Type Known", IsPositive = true }); } if (poi.StatusType == null || (poi.StatusType != null && poi.StatusType.ID == 0)) { //low quality score for status type report.ReportItems.Add(new DataQualityReportItem { Weighting = 10, Category = "Data Completeness", Comment = "Unknown Operational Status", IsPositive = false }); } else { report.ReportItems.Add(new DataQualityReportItem { Category = "Data Completeness", Comment = "Operational Status Known", IsPositive = true }); } if (poi.Connections == null || !poi.Connections.Any()) { report.ReportItems.Add(new DataQualityReportItem { Weighting = 50, Category = "Data Completeness", Comment = "No Equipment Details", IsPositive = false }); } else { report.ReportItems.Add(new DataQualityReportItem { Category = "Data Completeness", Comment = "Equipment Details Present", IsPositive = true }); } //data quality score starts at 5 (excellent) and is reduced towards 0 for each data issue double totalPoints = 100; foreach (var p in report.ReportItems.Where(r => r.IsPositive == false)) { totalPoints -= p.Weighting; } if (totalPoints < 0) totalPoints = 0; report.DataQualityScore = totalPoints; return report; }
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); }
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); }
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 OCM.Core.Data.ChargePoint PopulateChargePoint_SimpleToData(Model.ChargePoint simplePOI, OCM.Core.Data.OCMEntities dataModel) { var dataPOI = new OCM.Core.Data.ChargePoint(); if (simplePOI.ID > 0 && simplePOI.UUID != null) dataPOI = dataModel.ChargePoints.FirstOrDefault(cp => cp.ID == simplePOI.ID && cp.UUID.ToUpper() == simplePOI.UUID.ToUpper());// dataChargePoint.ID = simpleChargePoint.ID; // dataModel.ChargePoints.FirstOrDefault(c => c.ID == simpleChargePoint.ID); if (String.IsNullOrEmpty(dataPOI.UUID)) dataPOI.UUID = Guid.NewGuid().ToString().ToUpper(); //if required, set the parent charge point id if (simplePOI.ParentChargePointID != null) { //dataChargePoint.ParentChargePoint = dataModel.ChargePoints.FirstOrDefault(c=>c.ID==simpleChargePoint.ParentChargePointID); dataPOI.ParentChargePointID = simplePOI.ParentChargePointID; } else { dataPOI.ParentChargePoint = null; dataPOI.ParentChargePointID = null; } if (simplePOI.DataProviderID > 0 || (simplePOI.DataProvider != null && simplePOI.DataProvider.ID >= 0)) { int providerId = (simplePOI.DataProviderID != null ? (int)simplePOI.DataProviderID : simplePOI.DataProvider.ID); try { dataPOI.DataProvider = dataModel.DataProviders.First(d => d.ID == providerId); dataPOI.DataProviderID = dataPOI.DataProvider.ID; } catch (Exception exp) { //unknown operator throw new OCMAPIException("Unknown Data Provider Specified:"+providerId+" "+exp.ToString()); } } else { //set to ocm contributor by default dataPOI.DataProvider = dataModel.DataProviders.First(d => d.ID == (int)StandardDataProviders.OpenChargeMapContrib); dataPOI.DataProviderID = dataPOI.DataProvider.ID; } dataPOI.DataProvidersReference = simplePOI.DataProvidersReference; if (simplePOI.OperatorID >= 1 || (simplePOI.OperatorInfo != null && simplePOI.OperatorInfo.ID >= 0)) { int operatorId = (simplePOI.OperatorID != null ? (int)simplePOI.OperatorID : simplePOI.OperatorInfo.ID); try { dataPOI.Operator = dataModel.Operators.First(o => o.ID == operatorId); dataPOI.OperatorID = dataPOI.Operator.ID; } catch (Exception) { //unknown operator throw new OCMAPIException("Unknown Network Operator Specified:"+operatorId); } } else { dataPOI.Operator = null; dataPOI.OperatorID = null; } dataPOI.OperatorsReference = simplePOI.OperatorsReference; if (simplePOI.UsageTypeID >= 0 || (simplePOI.UsageType != null && simplePOI.UsageType.ID >= 0)) { int usageTypeId = (simplePOI.UsageTypeID != null ? (int)simplePOI.UsageTypeID : simplePOI.UsageType.ID); try { dataPOI.UsageType = dataModel.UsageTypes.First(u => u.ID == usageTypeId); dataPOI.UsageTypeID = dataPOI.UsageType.ID; } catch (Exception) { //unknown usage type throw new OCMAPIException("Unknown Usage Type Specified:"+usageTypeId); } } else { dataPOI.UsageType = null; dataPOI.UsageTypeID = null; } if (dataPOI.AddressInfo == null && simplePOI.AddressInfo.ID > 0) { var addressInfo = dataModel.ChargePoints.FirstOrDefault(cp => cp.ID == simplePOI.ID).AddressInfo; if (addressInfo.ID == simplePOI.AddressInfo.ID) dataPOI.AddressInfo = addressInfo; } dataPOI.AddressInfo = PopulateAddressInfo_SimpleToData(simplePOI.AddressInfo, dataPOI.AddressInfo, dataModel); dataPOI.NumberOfPoints = simplePOI.NumberOfPoints; dataPOI.GeneralComments = simplePOI.GeneralComments; dataPOI.DatePlanned = simplePOI.DatePlanned; dataPOI.UsageCost = simplePOI.UsageCost; if (simplePOI.DateLastStatusUpdate != null) { dataPOI.DateLastStatusUpdate = DateTime.UtcNow; } else { dataPOI.DateLastStatusUpdate = DateTime.UtcNow; } if (simplePOI.DataQualityLevel != null && simplePOI.DataQualityLevel > 0) { if (simplePOI.DataQualityLevel > 5) simplePOI.DataQualityLevel = 5; dataPOI.DataQualityLevel = simplePOI.DataQualityLevel; } else { dataPOI.DataQualityLevel = 1; } if (simplePOI.DateCreated != null) { dataPOI.DateCreated = simplePOI.DateCreated; } else { if (dataPOI.DateCreated == null) dataPOI.DateCreated = DateTime.UtcNow; } var updateConnectionList = new List<OCM.Core.Data.ConnectionInfo>(); var deleteList = new List<OCM.Core.Data.ConnectionInfo>(); if (simplePOI.Connections != null) { foreach (var c in simplePOI.Connections) { var connectionInfo = new Core.Data.ConnectionInfo(); //edit existing, if required if (c.ID > 0) connectionInfo = dataModel.ConnectionInfoList.FirstOrDefault(con => con.ID == c.ID && con.ChargePointID == dataPOI.ID); if (connectionInfo == null) { //connection is stale info, start new c.ID = 0; connectionInfo = new Core.Data.ConnectionInfo(); } connectionInfo.Reference = c.Reference; connectionInfo.Comments = c.Comments; connectionInfo.Amps = c.Amps; connectionInfo.Voltage = c.Voltage; connectionInfo.Quantity = c.Quantity; connectionInfo.PowerKW = c.PowerKW; if (c.ConnectionTypeID >= 0 || (c.ConnectionType != null && c.ConnectionType.ID >= 0)) { int connectionTypeId = (c.ConnectionTypeID != null ? (int)c.ConnectionTypeID : c.ConnectionType.ID); try { connectionInfo.ConnectionType = dataModel.ConnectionTypes.First(ct => ct.ID == connectionTypeId); connectionInfo.ConnectionTypeID = connectionInfo.ConnectionType.ID; } catch (Exception) { throw new OCMAPIException("Unknown Connection Type Specified"); } } else { connectionInfo.ConnectionType = null; connectionInfo.ConnectionTypeID = 0; } if (c.LevelID >= 1 || (c.Level != null && c.Level.ID >= 1)) { int levelId = (c.LevelID != null ? (int)c.LevelID : c.Level.ID); try { connectionInfo.ChargerType = dataModel.ChargerTypes.First(chg => chg.ID == levelId); connectionInfo.LevelTypeID = connectionInfo.ChargerType.ID; } catch (Exception) { throw new OCMAPIException("Unknown Charger Level Specified"); } } else { connectionInfo.ChargerType = null; connectionInfo.LevelTypeID = null; } if (c.CurrentTypeID >= 10 || (c.CurrentType != null && c.CurrentType.ID >= 10)) { int currentTypeId = (c.CurrentTypeID != null ? (int)c.CurrentTypeID : c.CurrentType.ID); try { connectionInfo.CurrentType = dataModel.CurrentTypes.First(chg => chg.ID == currentTypeId); connectionInfo.CurrentTypeID = connectionInfo.CurrentType.ID; } catch (Exception) { throw new OCMAPIException("Unknown Current Type Specified"); } } else { connectionInfo.CurrentType = null; connectionInfo.CurrentTypeID = null; } if (c.StatusTypeID >= 0 || (c.StatusType != null && c.StatusType.ID >= 0)) { int statusTypeId = (c.StatusTypeID != null ? (int)c.StatusTypeID : c.StatusType.ID); try { connectionInfo.StatusType = dataModel.StatusTypes.First(s => s.ID == statusTypeId); connectionInfo.StatusTypeID = connectionInfo.StatusType.ID; } catch (Exception) { throw new OCMAPIException("Unknown Status Type Specified"); } } else { connectionInfo.StatusType = null; connectionInfo.StatusTypeID = null; } bool addConnection = false; //detect if connection details are non-blank/unknown before adding if ( !String.IsNullOrEmpty(connectionInfo.Reference) || !String.IsNullOrEmpty(connectionInfo.Comments) || connectionInfo.Amps != null || connectionInfo.Voltage != null || connectionInfo.PowerKW != null || (connectionInfo.ConnectionType != null && connectionInfo.ConnectionType.ID > 0) || (connectionInfo.StatusType != null && connectionInfo.StatusTypeID > 0) || (connectionInfo.ChargerType != null && connectionInfo.ChargerType.ID > 1) || (connectionInfo.CurrentType != null && connectionInfo.CurrentType.ID > 0) || (connectionInfo.Quantity != null && connectionInfo.Quantity > 1) ) { addConnection = true; if (connectionInfo.ChargePoint == null) connectionInfo.ChargePoint = dataPOI; } if (addConnection) { //if adding a new connection (not an update) add to model if (c.ID <= 0 || dataPOI.Connections.Count == 0) { dataPOI.Connections.Add(connectionInfo); } //track final list of connections being added/updated -- will then be used to delete by difference updateConnectionList.Add(connectionInfo); } else { //remove an existing connection no longer required //if (c.ID > 0) { if (connectionInfo.ChargePoint == null) connectionInfo.ChargePoint = dataPOI; deleteList.Add(connectionInfo); //dataChargePoint.Connections.Remove(connectionInfo); } } } } //find existing connections not in updated/added list, add to delete if (dataPOI.Connections != null) { foreach (var con in dataPOI.Connections) { if (!updateConnectionList.Contains(con)) { if (!deleteList.Contains(con)) { deleteList.Add(con); } } } } //finally clean up deleted items foreach (var item in deleteList) { if (item.ID > 0) { dataModel.ConnectionInfoList.Remove(item); } } if (dataPOI.MetadataValues == null) { dataPOI.MetadataValues = new List<OCM.Core.Data.MetadataValue>(); //add metadata values } if (simplePOI.MetadataValues != null) { foreach (var m in simplePOI.MetadataValues) { var existingValue = dataPOI.MetadataValues.FirstOrDefault(v => v.ID == m.ID); if (existingValue != null) { existingValue.ItemValue = m.ItemValue; } else { var newValue = new OCM.Core.Data.MetadataValue() { ChargePointID = dataPOI.ID, ItemValue = m.ItemValue, MetadataFieldID = m.MetadataFieldID, MetadataField = dataModel.MetadataFields.FirstOrDefault(f => f.ID == m.MetadataFieldID) }; dataPOI.MetadataValues.Add(newValue); } } } //TODO:clean up unused metadata values if (simplePOI.StatusTypeID != null || simplePOI.StatusType != null) { if (simplePOI.StatusTypeID == null && simplePOI.StatusType != null) simplePOI.StatusTypeID = simplePOI.StatusType.ID; dataPOI.StatusTypeID = simplePOI.StatusTypeID; dataPOI.StatusType = dataModel.StatusTypes.FirstOrDefault(s => s.ID == simplePOI.StatusTypeID); } else { dataPOI.StatusType = null; dataPOI.StatusTypeID = null; } if (simplePOI.SubmissionStatusTypeID != null || simplePOI.SubmissionStatus != null) { if (simplePOI.SubmissionStatusTypeID == null & simplePOI.SubmissionStatus != null) simplePOI.SubmissionStatusTypeID = simplePOI.SubmissionStatus.ID; dataPOI.SubmissionStatusType = dataModel.SubmissionStatusTypes.First(s => s.ID == simplePOI.SubmissionStatusTypeID); dataPOI.SubmissionStatusTypeID = simplePOI.SubmissionStatusTypeID; } else { dataPOI.SubmissionStatusTypeID = null; dataPOI.SubmissionStatusType = null; // dataModel.SubmissionStatusTypes.First(s => s.ID == (int)StandardSubmissionStatusTypes.Submitted_UnderReview); } return dataPOI; }
public Model.User GetUser(OCM.API.Common.Model.LoginModel loginModel) { if (!String.IsNullOrEmpty(loginModel.EmailAddress)) { var user = dataModel.Users.FirstOrDefault(u => u.EmailAddress.ToLower() == loginModel.EmailAddress.ToLower()); if (user != null) { if (String.IsNullOrEmpty(user.PasswordHash)) throw new PasswordNotSetException(); if (IsCorrectPassword(user.PasswordHash, loginModel.Password)) { return Model.Extensions.User.FromDataModel(user); } } } return null; }
public bool ProcessEquipmentSubmission(HttpContext context, ref OCM.API.Common.Model.ChargePoint cp) { return false; //html input provider no longer supported /* //construct simple model view of new CP based on input, to then be used to contruct data model version cp.AddressInfo = new Common.Model.AddressInfo(); cp.AddressInfo.Title = ParseString(context.Request["ocm_loc_title"]); cp.AddressInfo.AddressLine1 = ParseString(context.Request["ocm_loc_addressline1"]); cp.AddressInfo.AddressLine2 = ParseString(context.Request["ocm_loc_addressline2"]); cp.AddressInfo.Town = ParseString(context.Request["ocm_loc_town"]); cp.AddressInfo.StateOrProvince = ParseString(context.Request["ocm_loc_stateorprovince"]); cp.AddressInfo.Postcode = ParseString(context.Request["ocm_loc_postcode"]); cp.AddressInfo.Latitude = (double)ParseDouble(context.Request["ocm_loc_latitude"]); cp.AddressInfo.Longitude = (double)ParseDouble(context.Request["ocm_loc_longitude"]); int? countryID = ParseInt(context.Request["ocm_loc_countryid"]); if (countryID != null) cp.AddressInfo.Country = new Common.Model.Country() { ID = (int)countryID }; cp.AddressInfo.AccessComments = ParseLongString(context.Request["ocm_loc_accesscomments"]); cp.AddressInfo.ContactTelephone1 = ParseString(context.Request["ocm_loc_contacttelephone1"]); cp.AddressInfo.ContactEmail = ParseString(context.Request["ocm_loc_contactemail"]); //build connection info list //connection 1 to n cp.Connections = new List<Common.Model.ConnectionInfo>(); for (int i = 1; i <= 2; i++) { var connectionInfo = new Common.Model.ConnectionInfo(); int? connectionTypeID = ParseInt(context.Request["ocm_cp_connection" + i + "_type"]); if (connectionTypeID != null) { //TODO: remove/retire or remove entity reference for reference data lookup var connectionType = new OCM.Core.Data.OCMEntities().ConnectionTypes.First(ct => ct.ID == (int)connectionTypeID); connectionInfo.ConnectionType = OCM.API.Common.Model.Extensions.ConnectionType.FromDataModel(connectionType); } int? chargerLevelID = ParseInt(context.Request["ocm_cp_connection" + i + "_level"]); if (chargerLevelID != null) { connectionInfo.Level = new Common.Model.ChargerType() { ID = (int)chargerLevelID }; } connectionInfo.Amps = ParseInt(context.Request["ocm_cp_connection" + i + "_amps"]); connectionInfo.Voltage = ParseInt(context.Request["ocm_cp_connection" + i + "_volts"]); if (connectionInfo != null) { cp.Connections.Add(connectionInfo); } } cp.NumberOfPoints = ParseInt(context.Request["ocm_cp_numberofpoints"]); int? usageTypeID = ParseInt(context.Request["ocm_cp_usagetype"]); if (usageTypeID != null) { cp.UsageType = new Common.Model.UsageType() { ID = (int)usageTypeID }; } cp.UsageCost = ParseString(context.Request["ocm_cp_usagecost"]); int? statusTypeID = ParseInt(context.Request["ocm_cp_statustype"]); if (statusTypeID != null) { cp.StatusType = new Common.Model.StatusType() { ID = (int)statusTypeID }; } cp.GeneralComments = ParseLongString(context.Request["ocm_cp_generalcomments"]); return true; * */ }