예제 #1
0
        public ActionResult CreateSimple(string name, string delimiter, FormCollection form, HttpPostedFileBase file)
        {
            var email = Request?.RequestContext?.HttpContext?.User?.Identity?.Name;

            if (Request.IsAuthenticated == false)
            {
                return(RedirectToAction("Login", "Account", new { returnUrl = this.Request.Url.PathAndQuery }));
            }


            Guid fileId = Guid.NewGuid();
            var  uTmp   = new Lib.IO.UploadedTmpFile();

            if (string.IsNullOrEmpty(name))
            {
                ViewBag.ApiResponseError = ApiResponseStatus.Error(-99, "Bez jména datasetu nemůžeme pokračovat. Prozraďte nám ho, prosím.");
                return(View());
            }
            if (file == null)
            {
                ViewBag.ApiResponseError = ApiResponseStatus.Error(-99, "Źádné CSV jste nenahráli");

                return(View());
            }
            else
            {
                var path = uTmp.GetFullPath(fileId.ToString(), fileId.ToString() + ".csv");
                file.SaveAs(path);
                return(RedirectToAction("CreateSimple2", new { fileId = fileId, delimiter = CreateSimpleModel.GetValidDelimiter(delimiter), name = name }));
            }
        }
예제 #2
0
        public ActionResult DatasetSendNotifications(string id)
        {
            var apiAuth = Framework.ApiAuth.IsApiAuth(this,
                                                      parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id)
            });

            if (!apiAuth.Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess));
            }
            else
            {
                try
                {
                    var ds = DataSet.CachedDatasets.Get(id);
                    HlidacStatu.Lib.Data.WatchDog.Send.SendWatchDogs(predicate: wd => wd.dataType == "DataSet." + ds.DatasetId, type: "dataset");

                    return(Json(ApiResponseStatus.ApiUnauthorizedAccess));
                }
                catch (DataSetException dse)
                {
                    return(Json(dse.APIResponse, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #3
0
 public ApiResponse(ApiResponseStatus status, T data, string message, IEnumerable <string> errorMessages)
 {
     Status        = status;
     Data          = data;
     Message       = message;
     ErrorMessages = errorMessages;
 }
예제 #4
0
        public ActionResult Datasets_Update(string id)
        {
            var data    = ReadRequestBody(this.Request);
            var apiAuth = Framework.ApiAuth.IsApiAuth(this,
                                                      parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id)
            });

            if (!apiAuth.Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess));
            }
            else
            {
                try
                {
                    var newReg = Newtonsoft.Json.JsonConvert.DeserializeObject <Registration>(data, DataSet.DefaultDeserializationSettings);
                    return(Json(DataSet.Api.Update(newReg, apiAuth.ApiCall?.User), JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #5
0
 protected ApiResponseViewModel <T> ApiResponse <T>(ApiResponseStatus status, T data, string message)
 {
     return(new ApiResponseViewModel <T>
     {
         Status = status.GetDescription(),
         Data = data,
         Message = message,
         Timestamp = DateTime.Now.ToString("o"),
         ExecutionTime = $@"{_apiTimerService.RequestTime()}ms"
     });
 }
예제 #6
0
        public ApiResponseStatus ProcessWebRequest(string apiUrl, string httpVerb, string json,
                                                   Dictionary <string, string> headerParameters, string token)
        {
            var responseStatus = new ApiResponseStatus();

            var result  = string.Empty;
            var request = new WwwPostRequest(apiUrl);

            headerParameters.ToList().ForEach(x => request.AddParmeter(x.Key, x.Value));

            #region Create web request and Retry logic
            try
            {
                if (string.IsNullOrEmpty(token))
                {
                    responseStatus.Result = request.Send();
                }
                else
                {
                    responseStatus.Result = request.Send(token, json, httpVerb);
                }

                responseStatus.StatusCode = HttpStatusCode.OK;
            }
            catch (WebException exception)
            {
                if (exception.Status == WebExceptionStatus.ProtocolError)
                {
                    var response = exception.Response as HttpWebResponse;
                    if (response != null)
                    {
                        responseStatus.StatusCode = response.StatusCode;
                    }
                }
                if (exception.Response != null && exception.Response.GetResponseStream() != null)
                {
                    var resp = new StreamReader(exception.Response.GetResponseStream()).ReadToEnd();
                    result = (string.IsNullOrEmpty(resp) ? exception.Message : resp);
                }
                else
                {
                    result = exception.Message;
                }
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }

            #endregion

            responseStatus.Message = result;
            return(responseStatus);
        }
예제 #7
0
        public ActionResult ImportData(string id, string delimiter, string data, FormCollection form, HttpPostedFileBase file)
        {
            var email = Request?.RequestContext?.HttpContext?.User?.Identity?.Name;

            if (Request.IsAuthenticated == false)
            {
                //https://www.hlidacstatu.cz/account/Login?returnUrl=%2F%3Frnd%3D0036bd9be9bc42d4bdf449492968846e
                return(RedirectToAction("Login", "Account", new { returnUrl = this.Request.Url.PathAndQuery }));
            }

            if (string.IsNullOrEmpty(id))
            {
                return(Redirect("/data"));
            }

            var ds = DataSet.CachedDatasets.Get(id);

            if (ds == null)
            {
                return(Redirect("/data"));
            }

            if (ds.HasAdminAccess(email) == false)
            {
                return(View("NoAccess"));
            }

            datasetIndexStatCache.Invalidate();

            Guid fileId = Guid.NewGuid();
            var  uTmp   = new Lib.IO.UploadedTmpFile();

            if (string.IsNullOrEmpty(data))
            {
                if (file == null)
                {
                    ViewBag.ApiResponseError = ApiResponseStatus.Error(-99, "Źádné CSV jste nenahráli");

                    return(View());
                }
                else
                {
                    var path = uTmp.GetFullPath(fileId.ToString(), fileId.ToString() + ".csv");
                    file.SaveAs(path);
                    return(RedirectToAction("ImportData", new { id = ds.DatasetId, fileId = fileId, delimiter = CreateSimpleModel.GetValidDelimiter(delimiter) }));
                }
            }
            else
            {
                var path = uTmp.GetFullPath(fileId.ToString(), fileId.ToString() + ".csv");
                System.IO.File.WriteAllText(path, data);
                return(RedirectToAction("ImportData", new { id = ds.DatasetId, fileId = fileId, delimiter = "auto" }));
            }
        }
예제 #8
0
        public ActionResult Datasets_Delete(string _id)
        {
            string id = _id;

            var apiAuth = Framework.ApiAuth.IsApiAuth(this,
                                                      parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id)
            });

            if (!apiAuth.Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                try
                {
                    if (string.IsNullOrEmpty(id))
                    {
                        return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                    }

                    id = id.ToLower();
                    var r = DataSetDB.Instance.GetRegistration(id);
                    if (r == null)
                    {
                        return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                    }

                    if (r.createdBy != null && apiAuth.ApiCall.User.ToLower() != r.createdBy?.ToLower())
                    {
                        return(Json(ApiResponseStatus.DatasetNoPermision, JsonRequestBehavior.AllowGet));
                    }

                    var res = DataSetDB.Instance.DeleteRegistration(id, apiAuth.ApiCall.User);
                    return(Json(new ApiResponseStatus()
                    {
                        valid = res
                    }, JsonRequestBehavior.AllowGet));
                }
                catch (DataSetException dse)
                {
                    return(Json(dse.APIResponse, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #9
0
        public ActionResult Datasets_GET(string _id)
        {
            string id = _id;

            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id)
            })
                .Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                try
                {
                    if (string.IsNullOrEmpty(id))
                    {
                        return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(DataSetDB.Instance.SearchData("*", 1, 100).Result,
                                                                                   Newtonsoft.Json.Formatting.None,
                                                                                   new JsonSerializerSettings()
                        {
                            ContractResolver = Serialization.PublicDatasetContractResolver.Instance
                        })
                                       , "application/json"));
                    }
                    else
                    {
                        var ds = DataSet.CachedDatasets.Get(id);
                        if (ds == null)
                        {
                            return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                        }
                        else
                        {
                            return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(ds.Registration()), "application/json"));
                        }
                    }
                }
                catch (DataSetException dse)
                {
                    return(Json(dse.APIResponse, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #10
0
        public ActionResult Datasets_Create()
        {
            var data    = ReadRequestBody(this.Request);
            var apiAuth = Framework.ApiAuth.IsApiAuth(this,
                                                      parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("data", data)
            });

            if (!apiAuth.Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess));
            }
            else
            {
                try
                {
                    var reg = Newtonsoft.Json.JsonConvert.DeserializeObject <Registration>(data, DataSet.DefaultDeserializationSettings);
                    var res = DataSet.Api.Create(reg, apiAuth.ApiCall.User);

                    if (res.valid)
                    {
                        return(Json(new { datasetId = res.value }));
                    }
                    else
                    {
                        return(Json(res));
                    }
                }
                catch (Newtonsoft.Json.JsonSerializationException jex)
                {
                    var status = ApiResponseStatus.DatasetItemInvalidFormat;
                    status.error.errorDetail = jex.Message;
                    return(Json(status, JsonRequestBehavior.AllowGet));
                }
                catch (DataSetException dse)
                {
                    return(Json(dse.APIResponse, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #11
0
        public ActionResult DatasetItem_Get(string _id, string _dataid)
        {
            string id     = _id;
            string dataid = _dataid;

            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
                new Framework.ApiCall.CallParameter("dataid", dataid)
            })
                .Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                try
                {
                    var ds    = DataSet.CachedDatasets.Get(id.ToLower());
                    var value = ds.GetDataObj(dataid);
                    //remove from item
                    if (value == null)
                    {
                        return(Content("null", "application/json"));
                    }
                    else
                    {
                        value.DbCreatedBy = null;
                        return(Content(
                                   Newtonsoft.Json.JsonConvert.SerializeObject(
                                       value, Request.QueryString["nice"] == "1" ? Formatting.Indented : Formatting.None
                                       ) ?? "null", "application/json"));
                    }
                }
                catch (DataSetException)
                {
                    return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
        private ActionResult _DataHost(int id, string h)
        {
            ZabHost host = ZabTools.Weby().Where(w => w.hostid == id.ToString() & w.itemIdResponseTime != null).FirstOrDefault();

            if (host == null)
            {
                return(Json(ApiResponseStatus.StatniWebNotFound, JsonRequestBehavior.AllowGet));
            }

            if (host.ValidHash(h))
            {
                try
                {
                    var data    = ZabTools.GetHostAvailabilityLong(host);
                    var webssl  = ZabTools.SslStatusForHostId(host.hostid);
                    var ssldata = new
                    {
                        grade      = webssl?.Status().ToNiceDisplayName(),
                        time       = webssl?.Time,
                        copyright  = "(c) © Qualys, Inc. https://www.ssllabs.com/",
                        fullreport = "https://www.ssllabs.com/ssltest/analyze.html?d=" + webssl?.Host?.UriHost()
                    };
                    if (webssl == null)
                    {
                        ssldata = null;
                    }
                    return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(
                                       new
                    {
                        availability = data,
                        ssl = ssldata
                    })
                                   , "text/json"));
                }
                catch (Exception e)
                {
                    HlidacStatu.Util.Consts.Logger.Error($"_DataHost id ${id}", e);
                    return(Json(ApiResponseStatus.GeneralExceptionError(e), JsonRequestBehavior.AllowGet));
                }
            }
            else
            {
                return(Json(ApiResponseStatus.StatniWebNotFound, JsonRequestBehavior.AllowGet));
            }
        }
예제 #13
0
 public ActionResult CompanyID(string companyName)
 {
     if (!Framework.ApiAuth.IsApiAuth(this,
                                      parameters: new Framework.ApiCall.CallParameter[] {
         new Framework.ApiCall.CallParameter("companyName", companyName)
     })
         .Authentificated)
     {
         return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
     }
     else
     {
         try
         {
             if (string.IsNullOrEmpty(companyName))
             {
                 return(Json(new { }, JsonRequestBehavior.AllowGet));
             }
             else
             {
                 //HlidacStatu.Lib.Data.Firma f = HlidacStatu.Lib.Validators.FirmaInText(companyName);
                 var name  = HlidacStatu.Lib.Data.Firma.JmenoBezKoncovky(companyName);
                 var found = HlidacStatu.Lib.Data.Firma.Search.FindAll(name, 1).FirstOrDefault();
                 if (found == null)
                 {
                     return(Json(new { }, JsonRequestBehavior.AllowGet));
                 }
                 else
                 {
                     return(Json(new { ICO = found.ICO, Jmeno = found.Jmeno, DatovaSchranka = found.DatovaSchranka }, JsonRequestBehavior.AllowGet));
                 }
             }
         }
         catch (DataSetException dse)
         {
             return(Json(dse.APIResponse, JsonRequestBehavior.AllowGet));
         }
         catch (Exception ex)
         {
             HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
             return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
         }
     }
 }
예제 #14
0
        public ActionResult CreateFromBackup(FormCollection form, int step, HttpPostedFileBase file)
        {
            var email = Request?.RequestContext?.HttpContext?.User?.Identity?.Name;

            if (Request.IsAuthenticated == false)
            {
                return(RedirectToAction("Login", "Account", new { returnUrl = this.Request.Url.PathAndQuery }));
            }

            string json = "";

            if (file != null && file.InputStream != null && file.InputStream.CanRead)
            {
                using (StreamReader reader = new StreamReader(file.InputStream))
                {
                    json = reader.ReadToEnd();
                }
            }
            Registration reg = null;

            try
            {
                reg = Newtonsoft.Json.JsonConvert.DeserializeObject <Registration>(json);
            }
            catch { }
            if (reg == null)
            {
                ViewBag.ApiResponseError = ApiResponseStatus.Error(500, "Nekorektní záloha datasetu", "Nekorektní záloha datasetu");
            }

            datasetIndexStatCache.Invalidate();

            if (reg != null)
            {
                var ds = DataSet.CachedDatasets.Get(reg.datasetId);
                if (ds != null)
                {
                    ViewBag.ExistsDS = ds.Registration();
                }
            }

            return(View("CreateFromBackup" + step, reg));
        }
예제 #15
0
        public ActionResult DatasetItem_Exists(string _id, string _dataid)
        {
            string id     = _id;
            string dataid = _dataid;

            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
                new Framework.ApiCall.CallParameter("dataid", dataid)
            })
                .Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                try
                {
                    var  ds    = DataSet.CachedDatasets.Get(id.ToLower());
                    bool value = ds.ItemExists(dataid);
                    //remove from item
                    if (value == false)
                    {
                        return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(false), "application/json"));
                    }
                    else
                    {
                        return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(true), "application/json"));
                    }
                }
                catch (DataSetException)
                {
                    return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #16
0
 public static IApiResponse <IPaged <IEnumerable <T> > > ToApiResponsePaged <T>(this IQueryable <T> source, int?Page, int?PageSize, out int Count, string message = null, ApiResponseStatus apiResponseStatus = ApiResponseStatus.Succeeded)
 {
     source = source.Paged(Page, PageSize, out Count);
     return(new ApiResponse <IPaged <IEnumerable <T> > >()
     {
         Data = new Paged <IEnumerable <T> >(Page.Value, PageSize.Value, Count, (Count > 0 ? source.ToList() : Enumerable.Empty <T>())),
         Message = message,
         Status = apiResponseStatus
     });
 }
예제 #17
0
        public ActionResult ImportDataProcess(string id, CreateSimpleModel model, FormCollection form)
        {
            var email = Request?.RequestContext?.HttpContext?.User?.Identity?.Name;

            if (Request.IsAuthenticated == false)
            {
                //https://www.hlidacstatu.cz/account/Login?returnUrl=%2F%3Frnd%3D0036bd9be9bc42d4bdf449492968846e
                return(RedirectToAction("Login", "Account", new { returnUrl = this.Request.Url.PathAndQuery }));
            }

            ViewBag.NumOfRows = 0;

            model.DatasetId = id;


            string[] csvHeaders = null;

            if (string.IsNullOrEmpty(id))
            {
                return(Redirect("/data"));
            }

            var ds = DataSet.CachedDatasets.Get(id);

            if (ds == null)
            {
                return(Redirect("/data"));
            }

            if (ds.HasAdminAccess(email) == false)
            {
                return(View("NoAccess"));
            }

            datasetIndexStatCache.Invalidate();


            if (ds.IsFlatStructure() == false)
            {
                return(RedirectToAction("ImportData", new { id = ds.DatasetId, fileId = model.FileId, delimiter = model.GetValidDelimiter() }));
            }

            var uTmp = new Lib.IO.UploadedTmpFile();
            var path = uTmp.GetFullPath(model.FileId.ToString(), model.FileId.ToString() + ".csv");

            if (!System.IO.File.Exists(path))
            {
                return(RedirectToAction("ImportData", new { id = ds.DatasetId }));
            }

            RuntimeClassBuilder rcb = new RuntimeClassBuilder(ds.GetPropertyNamesTypesFromSchema().ToDictionary(m => m.Key, v => v.Value.Type));

            string[]          formsHeaders = form["sheaders"].Split('|');
            List <MappingCSV> mappingProps = new List <MappingCSV>();

            for (int i = 0; i < formsHeaders.Length + 3; i++) //+3 a little bit more, at least +1 for id column
            {
                if (!string.IsNullOrEmpty(form["source_" + i]) &&
                    !string.IsNullOrEmpty(form["target_" + i]) &&
                    !string.IsNullOrEmpty(form["transform_" + i])
                    )
                {
                    mappingProps.Add(new MappingCSV()
                    {
                        sourceCSV  = form["source_" + i],
                        TargetJSON = form["target_" + i],
                        Transform  = form["transform_" + i]
                    }
                                     );
                }
            }

            System.Collections.Concurrent.ConcurrentBag <Exception> errors = new System.Collections.Concurrent.ConcurrentBag <Exception>();

            List <Tuple <object, string> > items = new List <Tuple <object, string> >();

            try
            {
                using (System.IO.StreamReader r = new System.IO.StreamReader(path))
                {
                    if (model.Delimiter == "auto")
                    {
                        model.Delimiter = Devmasters.IO.IOTools.DetectCSVDelimiter(r);
                    }

                    var csv = new CsvHelper.CsvReader(r, new CsvHelper.Configuration.CsvConfiguration(Util.Consts.csCulture)
                    {
                        HasHeaderRecord = true
                        ,
                        Delimiter = model.GetValidDelimiter()
                                    //,MissingFieldFound = null
                    }
                                                      );
                    csv.Read(); csv.ReadHeader();
                    csvHeaders = csv.HeaderRecord.Where(m => !string.IsNullOrEmpty(m?.Trim())).ToArray(); //for future control

                    while (csv.Read())
                    {
                        var newObj = rcb.CreateObject();
                        for (int m = 0; m < mappingProps.Count; m++)
                        {
                            Type   destType = ds.GetPropertyNameTypeFromSchema(mappingProps[m].TargetJSON).FirstOrDefault().Value.Type;
                            object value    = null;

                            string[] specialValues = new string[] { "-skip-", "-gen-", "--" };
                            if (specialValues.Contains(mappingProps[m].sourceCSV))
                            {
                                if (mappingProps[m].sourceCSV == "-gen-")
                                {
                                    value = Guid.NewGuid().ToString("N");
                                    rcb.SetPropertyValue(newObj, mappingProps[m].TargetJSON, value);
                                }
                                else
                                {
                                    continue; // -skip- skip
                                }
                            }
                            else
                            {
                                string svalue = null;
                                try
                                {
                                    svalue = csv.GetField(mappingProps[m].sourceCSV);
                                    if (destType == typeof(string))
                                    {
                                        value = svalue;
                                    }
                                    else if (destType == typeof(DateTime) || destType == typeof(DateTime?))
                                    {
                                        value = Devmasters.DT.Util.ToDateTime(svalue);
                                    }
                                    else if (destType == typeof(decimal) || destType == typeof(decimal?))
                                    {
                                        value = Util.ParseTools.ToDecimal(svalue);
                                        if (value == null)
                                        {
                                            value = Util.ParseTools.FromTextToDecimal(svalue);
                                        }
                                    }
                                    else if (destType == typeof(long) || destType == typeof(long?) ||
                                             destType == typeof(int) || destType == typeof(int?))
                                    {
                                        value = Devmasters.DT.Util.ToDate(svalue);
                                    }
                                    else if (destType == typeof(bool) || destType == typeof(bool?))
                                    {
                                        if (bool.TryParse(svalue, out bool tryp))
                                        {
                                            value = tryp;
                                        }
                                    }
                                    else
                                    {
                                        value = svalue;
                                    }

                                    if (mappingProps[m].Transform == "normalize" &&
                                        destType == typeof(string)
                                        )
                                    {
                                        value = DataSet.NormalizeValueForId((string)value);
                                    }
                                    else if (mappingProps[m].Transform == "findico" &&
                                             destType == typeof(string)
                                             )
                                    {
                                        value = Lib.Validators.IcosInText((string)value).FirstOrDefault();
                                    }
                                    else //copy
                                    {
                                    }
                                    rcb.SetPropertyValue(newObj, mappingProps[m].TargetJSON, value);
                                }
                                catch (Exception mex)
                                {
                                    errors.Add(mex);
                                }
                            }
                        } //for

                        string idPropName = "id";
                        string idVal      = rcb.GetPropertyValue(newObj, "id")?.ToString();
                        if (string.IsNullOrEmpty(idVal))
                        {
                            idVal      = rcb.GetPropertyValue(newObj, "Id")?.ToString();
                            idPropName = "Id";
                        }
                        if (string.IsNullOrEmpty(idVal))
                        {
                            idVal      = rcb.GetPropertyValue(newObj, "iD")?.ToString();
                            idPropName = "iD";
                        }
                        if (string.IsNullOrEmpty(idVal))
                        {
                            idVal      = rcb.GetPropertyValue(newObj, "ID")?.ToString();
                            idPropName = "ID";
                        }
                        try
                        {
                            //var debugJson = Newtonsoft.Json.JsonConvert.SerializeObject(newObj);
                            //normalize ID
                            idVal = DataSet.NormalizeValueForId(idVal);
                            rcb.SetPropertyValue(newObj, idPropName, idVal);

                            items.Add(new Tuple <object, string>(newObj, idVal));

                            model.NumOfRows++;
                        }
                        catch (DataSetException dex)
                        {
                            errors.Add(dex);
                        }
                        catch (Exception ex)
                        {
                            errors.Add(ex);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                errors.Add(ex);
            }

            try
            {
                Devmasters.Batch.Manager.DoActionForAll <Tuple <object, string> >(items,
                                                                                  (item) =>
                {
                    try
                    {
                        ds.AddData(item.Item1, item.Item2, email, true);
                    }
                    catch (Exception ex)
                    {
                        errors.Add(ex);
                    }

                    return(new Devmasters.Batch.ActionOutputData());
                }, true
                                                                                  );
            }
            catch (Exception ex)
            {
                errors.Add(ex);
            }

            if (errors?.Count > 0)
            {
                HlidacStatu.Util.Consts.Logger.Error("ImportDataProcess exceptions \n"
                                                     + errors.Select(m => m.Message).Aggregate((f, s) => f + "\n" + s));
            }

            ViewBag.ApiResponseError = ApiResponseStatus.Error(-99, "Chyba při importu dat");
            ViewBag.Errors           = errors.ToList();

            return(View(model));
        }
예제 #18
0
        public ActionResult DatasetsPart_Update(string id, string atribut)
        {
            if (string.IsNullOrEmpty(atribut))
            {
                return(Json(ApiResponseStatus.InvalidFormat, JsonRequestBehavior.AllowGet));
            }

            var data    = ReadRequestBody(this.Request);
            var apiAuth = Framework.ApiAuth.IsApiAuth(this,
                                                      parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
                new Framework.ApiCall.CallParameter("atribut", atribut)
            });

            if (!apiAuth.Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess));
            }
            else
            {
                try
                {
                    if (string.IsNullOrEmpty(id))
                    {
                        return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                    }

                    var oldReg = DataSetDB.Instance.GetRegistration(id);
                    if (oldReg == null)
                    {
                        return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                    }

                    if (string.IsNullOrEmpty(oldReg.createdBy))
                    {
                        oldReg.createdBy = apiAuth.ApiCall?.User?.ToLower();
                    }

                    if (apiAuth.ApiCall?.User?.ToLower() != oldReg?.createdBy?.ToLower() && apiAuth.ApiCall.User.ToLower() != "*****@*****.**")
                    {
                        return(Json(ApiResponseStatus.DatasetNoPermision, JsonRequestBehavior.AllowGet));
                    }

                    using (System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient())
                    {
                        var m = new System.Net.Mail.MailMessage()
                        {
                            From       = new System.Net.Mail.MailAddress("*****@*****.**"),
                            Subject    = "update DATASET registrace od " + apiAuth.ApiCall?.User?.ToLower(),
                            IsBodyHtml = false,
                            Body       = data
                        };
                        m.BodyEncoding    = System.Text.Encoding.UTF8;
                        m.SubjectEncoding = System.Text.Encoding.UTF8;
                        m.To.Add("*****@*****.**");
                        try
                        {
                            smtp.Send(m);
                        }
                        catch (Exception)
                        {
                        }
                    }

                    switch (atribut.ToLower())
                    {
                    case "name":
                        oldReg.name = data;
                        break;

                    case "origurl":
                        oldReg.origUrl = data;
                        break;

                    case "sourcecodeurl":
                        oldReg.sourcecodeUrl = data;
                        break;

                    case "description":
                        oldReg.description = data;
                        break;

                    case "betaversion":
                        oldReg.betaversion = data == "true";
                        break;

                    case "allowwriteaccess":
                        oldReg.allowWriteAccess = data == "true";
                        break;

                    case "searchresulttemplate":
                        oldReg.searchResultTemplate = Newtonsoft.Json.JsonConvert.DeserializeObject <Registration.Template>(data);
                        break;

                    case "detailtemplate":
                        oldReg.detailTemplate = Newtonsoft.Json.JsonConvert.DeserializeObject <Registration.Template>(data);
                        break;

                    default:
                        return(Json(ApiResponseStatus.InvalidFormat, JsonRequestBehavior.AllowGet));
                    }


                    DataSetDB.Instance.AddData(oldReg);


                    return(Json(ApiResponseStatus.Valid(), JsonRequestBehavior.AllowGet));
                }
                catch (DataSetException dse)
                {
                    return(Json(dse.APIResponse, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
                    return(Json(ApiResponseStatus.GeneralExceptionError, JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #19
0
        public ActionResult CreateSimple2(CreateSimpleModel model)
        {
            var email = Request?.RequestContext?.HttpContext?.User?.Identity?.Name;

            if (Request.IsAuthenticated == false)
            {
                return(RedirectToAction("Login", "Account", new { returnUrl = this.Request.Url.PathAndQuery }));
            }


            var uTmp = new Lib.IO.UploadedTmpFile();
            var path = uTmp.GetFullPath(model.FileId.ToString(), model.FileId.ToString() + ".csv");

            if (!System.IO.File.Exists(path))
            {
                return(RedirectToAction("CreateSimple"));
            }
            try
            {
                using (System.IO.StreamReader r = new System.IO.StreamReader(path))
                {
                    var config = new CsvHelper.Configuration.CsvConfiguration(Util.Consts.csCulture);
                    config.HasHeaderRecord = true;
                    config.Delimiter       = model.GetValidDelimiter();


                    var csv = new CsvHelper.CsvReader(r, config);
                    csv.Read(); csv.ReadHeader();
                    model.Headers = csv.HeaderRecord.Where(m => !string.IsNullOrEmpty(m?.Trim())).ToArray();

                    //read first lines with data and guest type
                    List <string[]> lines = new List <string[]>();
                    for (int row = 0; row < 10; row++)
                    {
                        if (csv.Read())
                        {
                            lines.Add(csv.GetRecords <string>().ToArray());
                        }
                    }
                    List <string> colTypes = null;
                    if (lines.Count > 0)
                    {
                        colTypes = new List <string>();
                        for (int cx = 0; cx < lines[0].Length; cx++)
                        {
                            string t = GuestBestCSVValueType(lines[0][cx]);
                            for (int line = 1; line < lines.Count; line++)
                            {
                                var nextT = GuestBestCSVValueType(lines[line][cx]);
                                if (nextT != t)
                                {
                                    t = "string"; //kdyz jsou ruzne typy ve stejnem sloupci v ruznych radcich,
                                }
                                //fallback na string
                            }
                            colTypes.Add(t);
                        }
                    }
                    ViewBag.ColTypes = colTypes.ToArray();

                    return(View(model));
                }
            }
            catch (Exception e)
            {
                ViewBag.ApiResponseError = ApiResponseStatus.Error(-99, "Soubor není ve formátu CSV.", e.ToString());

                return(View(model));
            }
        }
        public ActionResult NasiPolitici_GetData(string _id)
        {
            string id = _id;

            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
            })
                .Authentificated)
            {
                Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                var o = Osoba.GetByNameId(id);
                if (o == null)
                {
                    Response.StatusCode = 404;
                    return(Json(ApiResponseStatus.Error(404, "Politik not found"), JsonRequestBehavior.AllowGet));
                }
                if (o.StatusOsoby() != Osoba.StatusOsobyEnum.Politik)
                {
                    Response.StatusCode = 404;
                    return(Json(ApiResponseStatus.Error(404, "Person is not marked as politician"), JsonRequestBehavior.AllowGet));
                }

                var vazby = o.AktualniVazby(Relation.AktualnostType.Nedavny)
                            .Where(v => v.Distance == 1 && v.To?.Type == Graph.Node.NodeType.Company)
                            .Take(10)
                            .Select(v => new
                {
                    company     = Firma.FromIco(v.To.Id).Jmeno,
                    ico         = v.To.Id,
                    since       = v.RelFrom,
                    until       = v.RelTo,
                    description = v.Descr
                }).ToList();


                var statDescription =
                    InfoFact.RenderInfoFacts(
                        o.InfoFacts().Where(i => i.Level != InfoFact.ImportanceLevel.Stat).ToArray()
                        , 4, true, true, "", "{0}");

                var angazovanost =
                    InfoFact.RenderInfoFacts(
                        o.InfoFacts().Where(m => m.Level == InfoFact.ImportanceLevel.Stat).ToArray()
                        , 4, true, true, "", "{0}");


                int[] types =
                {
                    (int)OsobaEvent.Types.VolenaFunkce,
                    (int)OsobaEvent.Types.PolitickaPracovni,
                    (int)OsobaEvent.Types.Politicka,
                    (int)OsobaEvent.Types.VerejnaSpravaJine,
                    (int)OsobaEvent.Types.VerejnaSpravaPracovni,
                };
                //var funkceOsoba = o.Description(true,
                //        m => types.Contains(m.Type),
                //        20);

                var roleOsoba = o.Events(m =>
                                         types.Contains(m.Type) &&
                                         m.Status != (int)OsobaEvent.Statuses.NasiPoliticiSkryte)
                                .Select(e => new {
                    role         = e.AddInfo,
                    dateFrom     = e.DatumOd,
                    dateTo       = e.DatumDo,
                    organisation = e.Organizace
                })
                                .ToArray();

                string registrOznameni = o.Events(m =>
                                                  m.Type == (int)OsobaEvent.Types.CentralniRegistrOznameni &&
                                                  m.Status != (int)OsobaEvent.Statuses.NasiPoliticiSkryte)
                                         .Select(m => m.AddInfo).FirstOrDefault();

                List <StatementDTO> statements = null;
                if (!string.IsNullOrWhiteSpace(registrOznameni))
                {
                    var ds    = DataSet.CachedDatasets.Get("centralniregistroznameni");
                    var value = ds.GetDataObj(registrOznameni);


                    //StatementDTO[] statements = (StatementDTO[])value.statements;
                    statements = value?.statements?.ToObject <List <StatementDTO> >();
                }

                string osobaInsQuery = $"{{0}}.osobaId:{o.NameId}";
                //var oinsRes = HlidacStatu.Lib.Data.Insolvence.Insolvence.SimpleSearch("osobaid:" + Model.NameId, 1, 5, (int)HlidacStatu.Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.LatestUpdateDesc, false, false);
                //query: dluznici.osobaId:{o.NameId}
                var oinsDluznik = Lib.Data.Insolvence.Insolvence.SimpleSearch(string.Format(osobaInsQuery, "dluznici"), 1, 1, (int)Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.FastestForScroll, false, true);
                //query: veritele.osobaId:{o.NameId}
                var oinsVeritel = Lib.Data.Insolvence.Insolvence.SimpleSearch(string.Format(osobaInsQuery, "veritele"), 1, 1, (int)Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.FastestForScroll, false, true);
                //query: spravci.osobaId:{o.NameId}
                var oinsSpravce = Lib.Data.Insolvence.Insolvence.SimpleSearch(string.Format(osobaInsQuery, "spravci"), 1, 1, (int)Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.FastestForScroll, false, true);

                Dictionary <string, long> oinsolv = new Dictionary <string, long>();
                oinsolv.Add("dluznici|dlužník|dlužníka|dlužníkem", oinsDluznik.Total);
                oinsolv.Add("veritele|věřitel|věřitele|veřitelem", oinsVeritel.Total);
                oinsolv.Add("spravci|insolvenční správce|insolvenčního správce|insolvenčním správcem", oinsSpravce.Total);

                var insRes     = Lib.Data.Insolvence.Insolvence.SimpleSearch("osobaid:" + o.NameId, 1, 5, (int)Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.LatestUpdateDesc, false, true);
                var insDluznik = Lib.Data.Insolvence.Insolvence.SimpleSearch("osobaiddluznik:" + o.NameId, 1, 1, (int)Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.FastestForScroll, false, true);
                var insVeritel = Lib.Data.Insolvence.Insolvence.SimpleSearch("osobaidveritel:" + o.NameId, 1, 1, (int)Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.FastestForScroll, false, true);
                var insSpravce = Lib.Data.Insolvence.Insolvence.SimpleSearch("osobaidspravce:" + o.NameId, 1, 1, (int)Lib.Searching.InsolvenceSearchResult.InsolvenceOrderResult.FastestForScroll, false, true);

                Dictionary <string, long> insolv = new Dictionary <string, long>();
                insolv.Add("dluznik|dlužník|dlužníka|dlužníkem", insDluznik.Total);
                insolv.Add("veritel|věřitel|věřitele|veřitelem", insVeritel.Total);
                insolv.Add("spravce|insolvenční správce|insolvenčního správce|insolvenčním správcem", insSpravce.Total);

                var photo = o.GetPhotoUrl(false) + "?utm_source=nasipolitici&utm_medium=detail&utm_campaign=photo";

                var sponzorstvi = o.Events(m =>
                                           m.Type == (int)OsobaEvent.Types.Sponzor &&
                                           m.Status != (int)OsobaEvent.Statuses.NasiPoliticiSkryte)
                                  .Select(m => new
                {
                    party         = m.Organizace,
                    donatedAmount = m.AddInfoNum,
                    year          = m.DatumOd?.Year,
                    source        = m.Zdroj
                }
                                          ).ToArray();

                var insPerson = new
                {
                    debtorCount = oinsDluznik.Total,
                    debtorLink  = $"https://www.hlidacstatu.cz/insolvence/hledat?Q=dluznici.osobaId:{o.NameId}"
                                  + "&utm_source=nasipolitici&utm_medium=detail&utm_campaign=dluznikosoba",
                    creditorCount = oinsVeritel.Total,
                    creditorLink  = $"https://www.hlidacstatu.cz/insolvence/hledat?Q=veritele.osobaId:{o.NameId}"
                                    + "&utm_source=nasipolitici&utm_medium=detail&utm_campaign=veritelosoba",
                    bailiffCount = oinsSpravce.Total,
                    bailiffLink  = $"https://www.hlidacstatu.cz/insolvence/hledat?Q=spravci.osobaId:{o.NameId}"
                                   + "&utm_source=nasipolitici&utm_medium=detail&utm_campaign=spravceosoba",
                };

                var insCompany = new
                {
                    debtorCount = insDluznik.Total,
                    debtorLink  = $"https://www.hlidacstatu.cz/insolvence/hledat?Q=osobaiddluznik:{o.NameId}"
                                  + "&utm_source=nasipolitici&utm_medium=detail&utm_campaign=dluznikfirma",
                    creditorCount = insVeritel.Total,
                    creditorLink  = $"https://www.hlidacstatu.cz/insolvence/hledat?Q=osobaidveritel:{o.NameId}"
                                    + "&utm_source=nasipolitici&utm_medium=detail&utm_campaign=veritelfirma",

                    bailiffCount = insSpravce.Total,
                    bailiffLink  = $"https://www.hlidacstatu.cz/insolvence/hledat?Q=osobaidspravce:{o.NameId}"
                                   + "&utm_source=nasipolitici&utm_medium=detail&utm_campaign=spravcefirma",
                };

                var lastUpdate = o.Events(m => true)
                                 .OrderByDescending(e => e.Created)
                                 .Select(e => e.Created)
                                 .FirstOrDefault();


                var result = new
                {
                    id                             = o.NameId,
                    lastUpdate                     = lastUpdate,
                    lastManualUpdate               = o.ManuallyUpdated,
                    namePrefix                     = o.TitulPred,
                    nameSuffix                     = o.TitulPo,
                    name                           = o.Jmeno,
                    surname                        = o.Prijmeni,
                    birthDate                      = o.Narozeni,
                    deathDate                      = o.Umrti,
                    status                         = o.StatusOsoby().ToString(),
                    hasPhoto                       = o.HasPhoto(),
                    photo                          = photo,
                    description                    = statDescription,
                    companyConnection              = angazovanost,
                    notificationRegisterId         = registrOznameni,
                    notificationRegisterStatements = statements,
                    //funkce = funkceOsoba,
                    roles             = roleOsoba,
                    insolvencyPerson  = insPerson,
                    insolvencyCompany = insCompany,
                    source            = o.GetUrl(false),
                    sponsor           = sponzorstvi,
                    currentParty      = o.CurrentPoliticalParty(),
                    contacts          = o.GetSocialContact(),
                    connections       = vazby,
                    wikiId            = o.WikiId,
                    //sources
                    sourceInsolvency = $"https://www.hlidacstatu.cz/insolvence/hledat?Q=osobaid:{o.NameId}"
                                       + "&utm_source=nasipolitici&utm_medium=detail&utm_campaign=osoba",
                    sourceSponzor = $"https://www.hlidacstatu.cz/osoba/{o.NameId}"
                                    + "?utm_source=nasipolitici&utm_medium=detail&utm_campaign=osoba",
                    sourceRegisterStatements = string.IsNullOrWhiteSpace(registrOznameni)
                            ? "https://www.hlidacstatu.cz" + "?utm_source=nasipolitici&utm_medium=detail&utm_campaign=osoba"
                            : $"https://www.hlidacstatu.cz/data/Detail/centralniregistroznameni/{registrOznameni}" + "?utm_source=nasipolitici&utm_medium=detail&utm_campaign=osoba",
                    sourceRoles = $"https://www.hlidacstatu.cz/osoba/{o.NameId}" + "?utm_source=nasipolitici&utm_medium=detail&utm_campaign=osoba",
                };

                return(Content(JsonConvert.SerializeObject(result), "application/json"));
                // return Json(result, JsonRequestBehavior.AllowGet);
            }
        }
예제 #21
0
 public static object SetResponse(ApiResponseStatus responseStatus, string message, object data)
 {
     return(new { responseStatus, message, data });
 }
예제 #22
0
 public QueryResult(string message, ApiResponseStatus status)
     : base(message, status)
 {
 }
예제 #23
0
 public static object SetResponse(ApiResponseStatus responseStatus, string message, object data)
 {
     return(new { ResponseStatus = responseStatus, Message = message, Data = data });
 }
        public ActionResult Watchdog(string _id, string _dataid, string dataType = "VerejnaZakazka", string query = null, string expiration = null)
        {
            string id     = _id;
            string dataid = _dataid;

            id = id.ToLower();
            var apiAuth = Framework.ApiAuth.IsApiAuth(this,
                                                      parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
                new Framework.ApiCall.CallParameter("query", query),
                new Framework.ApiCall.CallParameter("expiration", expiration)
            });

            if (!apiAuth.Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                if (apiAuth.ApiCall.User != "*****@*****.**" &&
                    apiAuth.ApiCall.User != "*****@*****.**"
                    )
                {
                    return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
                }

                var wdName = WatchDog.APIID_Prefix + dataid;
                using (HlidacStatu.Lib.Data.DbEntities db = new HlidacStatu.Lib.Data.DbEntities())
                {
                    switch (id.ToLower())
                    {
                    case "add":
                        var expirDate = Devmasters.DT.Util.ToDateTime(expiration, "yyyy-MM-ddTHH:mm:ss");
                        if (string.IsNullOrEmpty(query))
                        {
                            return(Json(ApiResponseStatus.Error(-99, "No query"), JsonRequestBehavior.AllowGet));
                        }

                        var wd2 = db.WatchDogs.AsNoTracking().Where(m => m.Name == wdName).FirstOrDefault();
                        if (wd2 != null)
                        {
                            wd2.SearchTerm = query;
                            wd2.Expires    = expirDate;
                            wd2.Save();
                        }
                        else
                        {
                            var dt = dataType;

                            HlidacStatu.Lib.Data.WatchDog wd = new HlidacStatu.Lib.Data.WatchDog();
                            wd.Created         = DateTime.Now;
                            wd.UserId          = apiAuth.ApiCall.UserId;
                            wd.StatusId        = 1;
                            wd.SearchTerm      = query;
                            wd.PeriodId        = 2; //daily
                            wd.FocusId         = 0;
                            wd.Name            = wdName;
                            wd.Expires         = expirDate;
                            wd.SpecificContact = "HTTPPOSTBACK";
                            if (dt.ToLower() == typeof(Smlouva).Name.ToLower())
                            {
                                wd.dataType = typeof(Smlouva).Name;
                            }
                            else if (dt.ToLower() == typeof(VerejnaZakazka).Name.ToLower())
                            {
                                wd.dataType = typeof(VerejnaZakazka).Name;
                            }
                            else if (dt.ToLower().StartsWith(typeof(HlidacStatu.Lib.Data.External.DataSets.DataSet).Name.ToLower()))
                            {
                                var dataSetId = dt.Replace("DataSet.", "");
                                if (HlidacStatu.Lib.Data.External.DataSets.DataSet.ExistsDataset(dataSetId) == false)
                                {
                                    HlidacStatu.Util.Consts.Logger.Error("AddWd - try to hack, wrong dataType = " + dataType + "." + dataSetId);
                                    throw new ArgumentOutOfRangeException("AddWd - try to hack, wrong dataType = " + dataType + "." + dataSetId);
                                }
                                wd.dataType = typeof(HlidacStatu.Lib.Data.External.DataSets.DataSet).Name + "." + dataSetId;
                            }
                            else if (dt == WatchDog.AllDbDataType)
                            {
                                wd.dataType = dt;
                            }
                            else
                            {
                                HlidacStatu.Util.Consts.Logger.Error("AddWd - try to hack, wrong dataType = " + dataType);
                                throw new ArgumentOutOfRangeException("AddWd - try to hack, wrong dataType = " + dataType);
                            }

                            wd.Save();
                        }
                        break;

                    case "delete":
                    case "disable":
                    case "get":
                    case "enable":
                        var wd1 = db.WatchDogs.AsNoTracking().Where(m => m.Name == wdName).FirstOrDefault();
                        if (wd1 == null)
                        {
                            return(Json(ApiResponseStatus.Error(-404, "Watchdog not found"), JsonRequestBehavior.AllowGet));
                        }

                        if (id == "delete")
                        {
                            wd1.Delete();
                            return(Json(new { Ok = true }, JsonRequestBehavior.AllowGet));
                        }
                        if (id == "disable")
                        {
                            wd1.StatusId = 0;
                        }
                        if (id == "delete")
                        {
                            wd1.StatusId = 1;
                        }
                        if (id == "get")
                        {
                            return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(new { id = wd1.Name.Replace("APIID:", ""), expiration = wd1.Expires, query = wd1.SearchTerm }), "text/json"));
                        }

                        wd1.Save();
                        break;

                    default:
                        break;
                    }
                }


                return(Json(new { Ok = true }, JsonRequestBehavior.AllowGet));
            }
        }
예제 #25
0
 public static object SetResponse(
     ApiResponseStatus responseStatus,
     string message,
     ApiOpStatus operationStatus,
     object data) =>
 new { ResponseStatus = responseStatus, Message = message, OperationStatus = operationStatus, Data = data };
예제 #26
0
        public ActionResult DatasetItem_Post(string id, string dataid, string mode = "", bool?rewrite = false)  //rewrite for backwards compatibility
        {
            var apiAuth = Framework.ApiAuth.IsApiAuth(this,
                                                      parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
                new Framework.ApiCall.CallParameter("dataid", dataid)
            });

            if (!apiAuth.Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess));
            }
            else
            {
                mode = mode.ToLower();
                if (string.IsNullOrEmpty(mode))
                {
                    if (rewrite == true)
                    {
                        mode = "rewrite";
                    }
                    else
                    {
                        mode = "skip";
                    }
                }

                var data = ReadRequestBody(this.Request);
                id = id.ToLower();
                try
                {
                    var ds    = DataSet.CachedDatasets.Get(id);
                    var newId = dataid;

                    if (mode == "rewrite")
                    {
                        newId = ds.AddData(data, dataid, apiAuth.ApiCall.User, true);
                    }
                    else if (mode == "merge")
                    {
                        if (ds.ItemExists(dataid))
                        {
                            //merge
                            var oldObj = Lib.Data.External.DataSets.Util.CleanHsProcessTypeValuesFromObject(ds.GetData(dataid));
                            var newObj = Lib.Data.External.DataSets.Util.CleanHsProcessTypeValuesFromObject(data);

                            newObj["DbCreated"]   = oldObj["DbCreated"];
                            newObj["DbCreatedBy"] = oldObj["DbCreatedBy"];

                            var diffs = Lib.Data.External.DataSets.Util.CompareObjects(oldObj, newObj);
                            if (diffs.Count > 0)
                            {
                                oldObj.Merge(newObj,
                                             new Newtonsoft.Json.Linq.JsonMergeSettings()
                                {
                                    MergeArrayHandling     = Newtonsoft.Json.Linq.MergeArrayHandling.Union,
                                    MergeNullValueHandling = Newtonsoft.Json.Linq.MergeNullValueHandling.Ignore
                                }
                                             );

                                newId = ds.AddData(oldObj.ToString(), dataid, apiAuth.ApiCall.User, true);
                            }
                        }
                        else
                        {
                            newId = ds.AddData(data, dataid, apiAuth.ApiCall.User, true);
                        }
                    }
                    else //skip
                    {
                        if (!ds.ItemExists(dataid))
                        {
                            newId = ds.AddData(data, dataid, apiAuth.ApiCall.User, true);
                        }
                    }
                    return(Json(new { id = newId }, JsonRequestBehavior.AllowGet));
                }
                catch (DataSetException dse)
                {
                    return(Json(dse.APIResponse, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    HlidacStatu.Util.Consts.Logger.Error("Dataset API", ex);
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #27
0
        public ActionResult DatasetSearch(string _id, string q, int?page, string sort = null, string desc = "0")
        {
            string id = _id;

            page = page ?? 1;
            if (page < 1)
            {
                page = 1;
            }
            if (page > 200)
            {
                return(Content(
                           Newtonsoft.Json.JsonConvert.SerializeObject(
                               new { total = 0, page = 201, results = Array.Empty <dynamic>() }
                               )
                           , "application/json"));
            }

            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
                new Framework.ApiCall.CallParameter("q", q),
                new Framework.ApiCall.CallParameter("page", page?.ToString()),
                new Framework.ApiCall.CallParameter("sort", sort)
            })
                .Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                try
                {
                    var ds = DataSet.CachedDatasets.Get(id?.ToLower());
                    if (ds == null)
                    {
                        return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                    }


                    bool bDesc = (desc == "1" || desc?.ToLower() == "true");
                    var  res   = ds.SearchData(q, page.Value, 50, sort + (bDesc ? " desc" : ""));
                    res.Result = res.Result.Select(m => { m.DbCreatedBy = null; return(m); });


                    return(Content(
                               Newtonsoft.Json.JsonConvert.SerializeObject(
                                   new { total = res.Total, page = res.Page, results = res.Result }
                                   )
                               , "application/json"));
                }
                catch (DataSetException dex)
                {
                    return(Json(dex.APIResponse, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }
예제 #28
0
        public static IApiResponse <IPaged <IEnumerable <T> > > ToApiResponsePaged <T>(this IQueryable <T> source, int?Page, int?PageSize, out int Count, IEnumerable <string> decryptFieldsOnRead, string encryptionKey, string message = null, ApiResponseStatus apiResponseStatus = ApiResponseStatus.Succeeded)
        {
            source = source.Paged(Page, PageSize, out Count);
            var data = Count > 0 ? source.ToList() : new List <T>();

            if (decryptFieldsOnRead.Any())
            {
                foreach (var record in data)
                {
                    foreach (var prop in decryptFieldsOnRead)
                    {
                        var value = record.GetType().GetProperty(prop).GetValue(record).ToString();
                        record.GetType().GetProperty(prop).SetValue(record, value.DecryptData(encryptionKey));
                    }
                }
            }

            return(new ApiResponse <IPaged <IEnumerable <T> > >()
            {
                Data = new Paged <IEnumerable <T> >(Page.Value, PageSize.Value, Count, data),
                Message = message,
                Status = apiResponseStatus
            });
        }
예제 #29
0
 public static async Task <IActionResult> ToJsonApiResponseAsync <T>(this IQueryable <T> source, string message = null, ApiResponseStatus apiResponseStatus = ApiResponseStatus.Succeeded)
 {
     return(new ContentResult()
            .OutputJson
            (
                new ApiResponse <IEnumerable <T> >()
     {
         Data = await source.Future().ToListAsync(),
         Message = message,
         Status = apiResponseStatus
     }
            ));
 }
예제 #30
0
        public ActionResult DatasetSearch(string id, string q, int?page, string sort = null, bool desc = false)
        {
            page = page ?? 1;
            if (page < 1)
            {
                page = 1;
            }
            if (page > 200)
            {
                page = 200;
            }

            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("id", id),
                new Framework.ApiCall.CallParameter("q", q),
                new Framework.ApiCall.CallParameter("page", page?.ToString()),
                new Framework.ApiCall.CallParameter("sort", sort)
            })
                .Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess));
            }
            else
            {
                try
                {
                    var ds = DataSet.CachedDatasets.Get(id?.ToLower());

                    if (false)
                    {
                        var res = ds.SearchDataRaw(q, page.Value, 50, null);

                        System.Text.StringBuilder sb = new System.Text.StringBuilder(512 * (int)res.Total);
                        sb.Append($"{{ \"total\": {res.Total}, \"page\": {page}, \"results\" : [ ");
                        foreach (var item in res.Result)
                        {
                            sb.Append(item.Item2 + ", ");
                        }
                        sb.Remove(sb.Length - 2, 2);
                        sb.Append($"]}}");

                        return(Content(sb.ToString(), "application/json"));
                    }
                    else
                    {
                        var res = ds.SearchData(q, page.Value, 50, sort + (desc ? " desc" : ""));
                        res.Result = res.Result.Select(m => { m.DbCreatedBy = null; return(m); });


                        return(Content(
                                   Newtonsoft.Json.JsonConvert.SerializeObject(
                                       new { total = res.Total, page = res.Page, results = res.Result }
                                       )
                                   , "application/json"));
                    }
                }
                catch (DataSetException)
                {
                    return(Json(ApiResponseStatus.DatasetNotFound, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    return(Json(ApiResponseStatus.GeneralExceptionError(ex), JsonRequestBehavior.AllowGet));
                }
            }
        }