Example #1
0
        // 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;
            }));
        }
Example #2
0
        // 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);
        }
Example #3
0
// 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;
                }));
            }
Example #4
0
        // 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;
            }));
        }