// public static public Task <ActionResult> ProcessQuery <T>(IIdentity user, HttpRequest uriInfo, DbContext entityManager, String serviceName) where T : class { IQueryCollection queryParameters = uriInfo.Query; DbUtils.QueryMap fields = RequestFilter.ParseQueryParameters((LoginResponse)user, serviceName, queryParameters); String[] orderBy = null; { CrudService service = RequestFilter.GetService(user, serviceName); if (service.OrderBy != null) { orderBy = service.OrderBy.Split(','); } } int?startPosition = null; int?maxResult = null; startPosition = queryParameters["start"].Count == 1 ? int.Parse(queryParameters["start"]) : startPosition; maxResult = queryParameters["max"].Count == 1 ? int.Parse(queryParameters["max"]) : maxResult; Type entityClass = RequestFilter.mapClass[serviceName]; return(DbUtils.Find <T>(entityManager, entityClass, fields, orderBy, startPosition, maxResult).ContinueWith(taskResults => { if (taskResults.Exception != null) { return Response.BadRequest("ProcessQuery.Find : " + taskResults.Exception.Message); } ActionResult response = Response.Ok(taskResults.Result); return response; })); }
// private static private DbUtils.QueryMap ParseQueryParameters(LoginResponse login, String serviceName, IQueryCollection queryParameters) { CrudService service = RequestFilter.GetService(login, serviceName); DbUtils.QueryMap queryFields = DbUtils.QueryMap.Create(); JObject serviceFields = JObject.Parse(service.Fields); foreach (var item in serviceFields) { JToken field = item.Value; if (field.Value <Boolean> ("primaryKey") == true) { StringValues values = queryParameters [item.Key]; if (values.Count > 0) { String type = field.Value <String> ("type"); if (type == null || type.Equals("s")) { queryFields.Add(item.Key, values.First()); } else if (type.Equals("n") || type.Equals("i")) { queryFields.Add(item.Key, int.Parse(values.First())); } else if (type.Equals("b")) { queryFields.Add(item.Key, Boolean.Parse(values.First())); } } } } // se não for admin, limita os resultados para as crudGroup vinculadas a empresa do usuário int?crudGroupOwner = login.user.CrudGroupOwner; if (crudGroupOwner != 1) { if (serviceFields.ContainsKey("crudGroupOwner")) { queryFields["crudGroupOwner"] = crudGroupOwner; } else if (serviceFields.ContainsKey("crudGroup")) { queryFields["crudGroup"] = login.groups; } } return(queryFields); }
// Load crudGroupOwner, Services and Groups public static Task <LoginResponse> Load(CrudUser user, DbContext entityManager) { LoginResponse loginResponse = new LoginResponse(user); DbUtils.QueryMap query = DbUtils.QueryMap.Create().AddNext("id", loginResponse.user.CrudGroupOwner); return(DbUtils.FindOne <CrudGroupOwner> (entityManager, null, query) .ContinueWith <LoginResponse> (crudGroupOwner => { if (crudGroupOwner.Exception != null) { throw new AggregateException("don't get user crudGroupOwner : " + crudGroupOwner.Exception.Message); } loginResponse.title = crudGroupOwner.Result.Name + " - " + user.Name; // TODO : código temporário para caber o na tela do celular loginResponse.title = user.Name; foreach (String serviceName in loginResponse.servicesNames) { loginResponse.crudServices.Add(RequestFilter.mapService [serviceName]); } // Add Groups DbUtils.QueryMap queryCat = DbUtils.QueryMap.Create().AddNext("crud_user", loginResponse.user.Name); return DbUtils.Find <CrudGroupUser> (entityManager, null, queryCat, null, null, null) .ContinueWith <LoginResponse> (taskGroups => { if (taskGroups.Exception != null) { throw new AggregateException("don't match request crudGroup for user : " + taskGroups.Exception.Message); } loginResponse.groups = new List <int> (taskGroups.Result.Count); foreach (CrudGroupUser crudGroupUser in taskGroups.Result) { loginResponse.groups.Add(crudGroupUser.CrudGroup); } return loginResponse; }).Result; })); }
// private private Task <ActionResult> AuthenticateByUserAndPassword(DbContext entityManager, HttpContext requestContext, String ip) { JObject json = JObject.Parse(new StreamReader(requestContext.Request.Body).ReadToEnd()); String userId = json.GetValue("userId").Value <String> (); String password = json.GetValue("password").Value <String>(); DbUtils.QueryMap userQuery = DbUtils.QueryMap.Create().AddNext("name", userId).AddNext("password", password); return(DbUtils.FindOne <CrudUser> (entityManager, null, userQuery).ContinueWith <ActionResult> (taskFindUser => { if (taskFindUser.Exception != null) { return Response.Unauthorized("don't found match user and password : "******"don't update user : "******"don't load login : " + taskLoginResponse.Exception); } LoginResponse loginResponse = taskLoginResponse.Result; RequestFilter.logins.Add(token, loginResponse); return Response.Ok(loginResponse); }).Result; }).Result; })); }