示例#1
0
        public IHttpActionResult FinalizeResponse(IDataResponse <T> response, string fields = null, UrlHelper urlHelper = null)
        {
            try
            {
                urlHelper = urlHelper ?? GetUrlHelper();
                if (response.Data == null)
                {
                    return(NotFound());
                }
                if (!response.IsSuccessful)
                {
                    return(BadRequest(response.ErrorMessages.ToString()));
                }

                var dynamicResponse = DynamicTransmogrifier.ToDynamicResponse(response, fields);
                if (!dynamicResponse.IsSuccessful)
                {
                    throw new Exception(string.Join(", ", dynamicResponse.ErrorMessages));
                }

                return(Ok(dynamicResponse));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex);
                return(InternalServerError(new Exception(ex.Message)));
            }
        }
        public void UpdateTitleBarTeamStats()
        {
            int    licensed    = 0;
            int    provisioned = 0;
            string name        = string.Empty;

            //do a call to get team info
            IMemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.GetInfoUrl       = ApplicationResource.ActionGetInfo;
            service.UserAgentVersion = ApplicationResource.UserAgent;
            string AccessToken = ApplicationResource.DefaultAccessToken;

            IDataResponse response = service.GetInfo(AccessToken);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                if (response.Data != null)
                {
                    string  data     = response.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    name        = jsonData["name"];
                    licensed    = jsonData["num_licensed_users"];
                    provisioned = jsonData["num_provisioned_users"];
                }
            }
            //get toolkit version and build title text
            string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

            this.Text = "Dropbox Business Admin Toolkit v" + version + "            Team: " + name + "       Licensed Users: " + licensed.ToString() + "       Provisioned Users: " + provisioned.ToString();
            this.Update();
            this.Refresh();
        }
示例#3
0
        private void OnEncode(ISession session, object data, System.IO.Stream stream)
        {
            PipeStream    pstream      = stream.ToPipeStream();
            IDataResponse dataResponse = data as IDataResponse;

            if (dataResponse != null)
            {
                dataResponse.Write(pstream);
            }
            else
            {
                if (session.Server.EnableLog(LogType.Error))
                {
                    session.Server.Log(LogType.Error, session, $"{session.RemoteEndPoint} response {data} no impl  IDataResponse");
                }
            }
            //StaticResurce.FileBlock fb = data as StaticResurce.FileBlock;
            //if (fb != null)
            //{
            //    fb.Write(pstream);
            //}
            //else
            //{
            //    DataFrame dataPacket = data as DataFrame;
            //    if (dataPacket != null)
            //    {
            //        dataPacket.Write(pstream);
            //    }
            //    else
            //    {
            //        HttpResponse response = (HttpResponse)data;
            //        response.Write(pstream);
            //    }
            //}
        }
示例#4
0
        protected IHttpActionResult FinalizeResponse <T1>(IDataResponse <IEnumerable <T1> > response, IPageable search, string fields = null)
            where T1 : class
        {
            try
            {
                if (search == null)
                {
                    search = PageableSearch.Default;
                }

                if (!response.IsSuccessful)
                {
                    return(BadRequest(string.Join(", ", response.ErrorMessages)));
                }

                var totalCount = response.TotalResults;

                var dynamicResponse = dynamicTransmogrifier.ToDynamicResponse(response, fields);
                if (!dynamicResponse.IsSuccessful)
                {
                    throw new Exception(string.Join(", ", dynamicResponse.ErrorMessages));
                }
                return(Ok(dynamicResponse));
            }
            catch (Exception ex)
            {
                logger.LogError(ex);
                return(InternalServerError(new Exception(ex.Message)));
            }
        }
示例#5
0
        /* Fields is a comma delimited list of property names or paths (e.g. State.County) that should be included in the response.
         * Fields can be excluded:  This can be useful to exclude properties like Region.ParentRegion or Region.ChildRegions (because they are recursive.)
         * To exclude a field, prefix it with "^": "^ParentRegion,^ChildRegions".
         * If a field list is nothing but excludes, all other fields will be included.
         * To exclude a field from a referenced entity: "ChildRegion.^ParentRegion"
         * To force all fields to be included:  "*,ChildRegion.Code"
         */
        public IDataResponse ToDynamicResponse <T>(IDataResponse <T> response, string fields = null)
        {
            var dynamicResponse = new DataResponse <dynamic>
            {
                ErrorMessages        = response.ErrorMessages,
                IsSuccessful         = response.IsSuccessful,
                TotalResults         = response.TotalResults,
                VerboseErrorMessages = response.VerboseErrorMessages
            };

            if (response.Data == null)
            {
                dynamicResponse.Data = null;
            }
            else if (response.Data is IEnumerable <ICanTransmogrify> )
            {
                dynamicResponse.Data = ToDynamicList((response.Data as IEnumerable <ICanTransmogrify>), fields);
            }
            else if (response.Data is ICanTransmogrify)
            {
                dynamicResponse.Data = ToDynamicObject((response.Data as ICanTransmogrify), fields);
            }
            else if (IsSimple(response.Data.GetType()))
            {
                dynamicResponse.Data = response.Data;
            }
            return(dynamicResponse);
        }
示例#6
0
        public IDataResponse <T> GetWhereExpression(Expression <Func <T, bool> > expression)
        {
            IDataResponse <T> response = GetIDataResponse(() => UnitOfWork.GetRepository <T>().GetEntities(includesForSingle).Where(expression).FirstOrDefault());

            FormatEntityForGet(response.Data, FieldLists.AllFields);
            return(response);
        }
示例#7
0
        protected IHttpActionResult FinalizeResponse(IDataResponse <T> response, string fields = null)
        {
            try
            {
                if (response.Data == null)
                {
                    if (response.ErrorMessages.Count > 0)
                    {
                        return(BadRequest(string.Join(",", response.ErrorMessages)));
                    }
                    else
                    {
                        return(NotFound());
                    }
                }
                if (!response.IsSuccessful)
                {
                    return(BadRequest(string.Join(",", response.ErrorMessages)));
                }

                var dynamicResponse = dynamicTransmogrifier.ToDynamicResponse(response, fields);
                if (!dynamicResponse.IsSuccessful)
                {
                    throw new Exception(string.Join(", ", dynamicResponse.ErrorMessages));
                }

                return(Ok(dynamicResponse));
            }
            catch (Exception ex)
            {
                logger.LogError(ex);
                return(InternalServerError(new Exception(ex.Message)));
            }
        }
示例#8
0
        public IHttpActionResult FinalizeResponse <T1>(IDataResponse <List <T1> > response, string routeName, IPageable search, string fields = null, UrlHelper urlHelper = null)
            where T1 : class
        {
            try
            {
                urlHelper = urlHelper ?? GetUrlHelper();
                if (!response.IsSuccessful)
                {
                    return(BadRequest(string.Join(", ", response.ErrorMessages)));
                }

                var totalCount = response.TotalResults;

                Pagination.AddPaginationHeaderToResponse(urlHelper, search, totalCount, routeName);
                var dynamicResponse = DynamicTransmogrifier.ToDynamicResponse(response, fields);
                if (!dynamicResponse.IsSuccessful)
                {
                    throw new Exception(string.Join(", ", dynamicResponse.ErrorMessages));
                }
                return(Ok(dynamicResponse));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex);
                return(InternalServerError(new Exception(ex.Message)));
            }
        }
示例#9
0
        private void SearchMembers(ITextSearchModel model)
        {
            if (!string.IsNullOrEmpty(model.QueryString) &&
                !string.IsNullOrEmpty(model.AccessToken))
            {
                MemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);
                service.ListMembersUrl   = ApplicationResource.ActionListMembers;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.ListMembers(new MemberData()
                {
                    SearchLimit = model.SearchResultsLimit
                }, model.AccessToken);
                IMainPresenter presenter = SimpleResolver.Instance.Get <IMainPresenter>();

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  data     = response.Data.ToString();
                        dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                        // clear existing data first
                        model.MemberList.Clear();

                        int resultCount = jsonData["members"].Count;
                        for (int i = 0; i < resultCount; i++)
                        {
                            dynamic idObj    = jsonData["members"][i]["profile"]["team_member_id"];
                            dynamic emailObj = jsonData["members"][i]["profile"]["email"];
                            string  memberId = idObj.Value as string;
                            string  email    = emailObj.Value as string;

                            // update model
                            MemberListViewItemModel lvItem = new MemberListViewItemModel()
                            {
                                Email    = email,
                                MemberId = memberId
                            };

                            // perform file search
                            if (!SearchFiles(service, memberId, model, email, presenter))
                            {
                                model.MemberList.Add(lvItem);
                            }
                            SyncContext.Post(delegate {
                                presenter.UpdateProgressInfo(string.Format("Searching Content(s) From : {0}", email));
                            }, null);
                        }
                    }
                }
                else
                {
                    // TODO: Report error
                }
            }
        }
示例#10
0
 protected virtual IActionResult GenerateResponse <T>(IDataResponse <T> response)
 {
     if (response.IsSuccess)
     {
         return(Ok(response.Data));
     }
     else
     {
         return(GenerateProblemResult(response.StatusCode, response.ErrorMessage));
     }
 }
示例#11
0
        private void OnEncode(ISession session, object data, System.IO.Stream stream)
        {
            PipeStream    pstream      = stream.ToPipeStream();
            IDataResponse dataResponse = data as IDataResponse;

            if (dataResponse != null)
            {
                dataResponse.Write(pstream);
            }
            else
            {
                if (session.Server.EnableLog(LogType.Error))
                {
                    session.Server.Log(LogType.Error, session, $"HTTP {session.RemoteEndPoint} response {data} no impl  IDataResponse");
                }
            }
        }
        private void GetTeamFolders(ITeamFoldersModel model, IMainPresenter presenter)
        {
            IMemberServices service = service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.ListTeamFolderUrl = ApplicationResource.ActionListTeamFolder;
            service.UserAgentVersion  = ApplicationResource.UserAgent;
            string        fileAccessToken = ApplicationResource.DefaultAccessToken;
            IDataResponse response        = service.ListTeamFolders(fileAccessToken);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                if (response.Data != null)
                {
                    string  data     = response.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    // clear existing data first
                    model.TeamFolders.Clear();
                    //changed from entries to team_folders
                    int resultCount = jsonData["team_folders"].Count;
                    for (int i = 0; i < resultCount; i++)
                    {
                        dynamic team_folders   = jsonData["team_folders"][i];
                        dynamic teamFolderName = team_folders["name"];
                        dynamic teamFolderId   = team_folders["team_folder_id"];
                        dynamic status         = team_folders["status"][".tag"];

                        // update model
                        TeamFoldersListViewItemModel lvItem = new TeamFoldersListViewItemModel()
                        {
                            TeamFolderName = teamFolderName,
                            TeamFolderId   = teamFolderId,
                            Status         = status
                        };
                        model.TeamFolders.Add(lvItem);
                    }
                }
            }
        }
示例#13
0
        /// <summary>
        /// Invoke a custom action that returns an IDataReponse
        /// </summary>
        /// <param name="action">Action to be invoked.</param>
        protected virtual IHttpActionResult CustomAction <T1>(Func <IDataResponse <T1> > action)
        {
            try
            {
                IDataResponse <T1> result = action();
                if (result.Data == null)
                {
                    return(NotFound());
                }

                if (!result.IsSuccessful)
                {
                    return(BadRequest(string.Join(",", result.ErrorMessages)));
                }
                return(Ok(result));
            }
            catch (Exception ex)
            {
                logger.LogError(ex);
                return(InternalServerError(new Exception(ex.Message)));
            }
        }
        private void SearchMembers(IDumpUserContentModel model, IMainPresenter presenter)
        {
            if (!string.IsNullOrEmpty(model.UserAccessToken))
            {
                MemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);
                service.ListMembersUrl   = ApplicationResource.ActionListMembers;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.ListMembers(new MemberData()
                {
                    SearchLimit = ApplicationResource.SearchDefaultLimit
                }, model.UserAccessToken);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  data     = response.Data.ToString();
                        dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                        // clear existing data first
                        model.MemberList.Clear();
                        int total       = 0;
                        int resultCount = jsonData["members"].Count;
                        for (int i = 0; i < resultCount; i++)
                        {
                            dynamic profile  = jsonData["members"][i]["profile"];
                            dynamic idObj    = profile["team_member_id"];
                            dynamic emailObj = profile["email"];
                            dynamic status   = profile["status"];
                            if (status != null && (status[".tag"].ToString().Equals("active") || status[".tag"].ToString().Equals("suspended") || status[".tag"].ToString().Equals("invited")))
                            {
                                string teamId = idObj.Value as string;
                                string email  = emailObj.Value as string;

                                // update model
                                TeamListViewItemModel lvItem = new TeamListViewItemModel()
                                {
                                    Email  = email,
                                    TeamId = teamId
                                };

                                model.MemberList.Add(lvItem);
                            }
                            if (SyncContext != null)
                            {
                                SyncContext.Post(delegate {
                                    presenter.UpdateProgressInfo("Scanning Account(s): " + (++total));
                                }, null);
                            }
                        }
                        //if the memberID count is above limit - default 1000 we need to grab the cursor and call continue
                        bool   hasMore = jsonData["has_more"];
                        string cursor  = jsonData["cursor"];

                        while (hasMore)
                        {
                            service.ListMembersContinuationUrl = ApplicationResource.ActionListMembersContinuation;
                            IDataResponse responseCont = service.ListMembersContinuation(new MemberData()
                            {
                                Cursor = cursor
                            }, model.UserAccessToken);

                            string  dataCont     = responseCont.Data.ToString();
                            dynamic jsonDataCont = JsonConvert.DeserializeObject <dynamic>(dataCont);

                            int resultContCount = jsonDataCont["members"].Count;
                            for (int i = 0; i < resultContCount; i++)
                            {
                                dynamic profile  = jsonDataCont["members"][i]["profile"];
                                dynamic idObj    = profile["team_member_id"];
                                dynamic emailObj = profile["email"];
                                dynamic status   = profile["status"];
                                if (status != null && (status[".tag"].ToString().Equals("active") || status[".tag"].ToString().Equals("suspended") || status[".tag"].ToString().Equals("invited")))
                                {
                                    string teamId = idObj.Value as string;
                                    string email  = emailObj.Value as string;

                                    // update model
                                    TeamListViewItemModel lvItem = new TeamListViewItemModel()
                                    {
                                        Email  = email,
                                        TeamId = teamId
                                    };

                                    model.MemberList.Add(lvItem);
                                }
                                if (SyncContext != null)
                                {
                                    SyncContext.Post(delegate {
                                        presenter.UpdateProgressInfo("Scanning Account(s): " + (++total));
                                    }, null);
                                }
                            }
                            hasMore = jsonDataCont["has_more"];
                            cursor  = jsonDataCont["cursor"];
                        }
                    }
                }
            }
        }
        private List <Tuple <string, string, string, string> > GetSharedFolders(IGroupsModel model, IMainPresenter presenter)
        {
            IMemberServices service = service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.ListSharedFoldersUrl = ApplicationResource.ActionSharingListFolders;
            service.UserAgentVersion     = ApplicationResource.UserAgent;
            var    sharedFolders = new List <Tuple <string, string, string, string> >();
            string memberId      = string.Empty;

            foreach (var item in model.GroupInfo)
            {
                if (!string.IsNullOrEmpty(item.TeamMemberId))
                {
                    memberId = item.TeamMemberId;
                    break;
                }
            }
            IDataResponse response = service.ListSharedFolders(new MemberData()
            {
                MemberId = memberId
            }, ApplicationResource.DefaultAccessToken);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                if (response.Data != null)
                {
                    string  data     = response.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    int resultCount = jsonData["entries"].Count;
                    for (int i = 0; i < resultCount; i++)
                    {
                        dynamic entries            = jsonData["entries"][i];
                        dynamic sharedFolderId     = Convert.ToString(entries["shared_folder_id"]);
                        dynamic sharedFolderName   = Convert.ToString(entries["name"]);
                        dynamic isInsideTeamFolder = Convert.ToString(entries["is_inside_team_folder"]);
                        dynamic isTeamFolder       = Convert.ToString(entries["is_team_folder"]);

                        var tuple = Tuple.Create(sharedFolderId, sharedFolderName, isInsideTeamFolder, isTeamFolder);
                        if (!sharedFolders.Contains(tuple))
                        {
                            sharedFolders.Add(tuple);
                        }
                    }
                    //if the group count is above limit - default 1000 we need to grab the cursor and call continue
                    string cursor = jsonData["cursor"];
                    while (!string.IsNullOrEmpty(cursor))
                    {
                        service.ListSharedFoldersUrl = ApplicationResource.ActionSharingListFoldersContinuation;
                        IDataResponse responseCont = service.ListSharedFolders(new MemberData()
                        {
                            MemberId = memberId,
                            Cursor   = cursor
                        }, model.AccessToken);

                        string  dataCont     = responseCont.Data.ToString();
                        dynamic jsonDataCont = JsonConvert.DeserializeObject <dynamic>(dataCont);

                        int resultContCount = jsonDataCont["entries"].Count;
                        for (int i = 0; i < resultContCount; i++)
                        {
                            dynamic entries            = jsonDataCont["entries"][i];
                            dynamic sharedFolderId     = Convert.ToString(entries["shared_folder_id"]);
                            dynamic sharedFolderName   = Convert.ToString(entries["name"]);
                            dynamic isInsideTeamFolder = Convert.ToString(entries["is_inside_team_folder"]);
                            dynamic isTeamFolder       = Convert.ToString(entries["is_team_folder"]);

                            var tuple = Tuple.Create(sharedFolderId, sharedFolderName, isInsideTeamFolder, isTeamFolder);
                            if (!sharedFolders.Contains(tuple))
                            {
                                sharedFolders.Add(tuple);
                            }
                        }
                        cursor = jsonDataCont["cursor"];
                    }
                }
            }
            return(sharedFolders);
        }
        private void ExportGroups(IGroupsModel model, IMainPresenter presenter)
        {
            IMemberServices service = service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.ExportGroupsUrl  = ApplicationResource.ActionGetGroupInfo;
            service.UserAgentVersion = ApplicationResource.UserAgent;
            List <string> groupIdList = new List <string>();

            foreach (GroupListViewItemModel item in model.Groups.Where(m => m.IsChecked).ToList())
            {
                groupIdList.Add(item.GroupId);
            }
            //if at least one is checked to export, lets do it
            if (groupIdList.Count > 0)
            {
                IDataResponse response = service.ExportGroups(new MemberData()
                {
                }, groupIdList, model.AccessToken);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  data     = response.Data.ToString();
                        dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                        // clear existing data first
                        model.GroupInfo.Clear();
                        int resultCount = jsonData.Count;

                        for (int i = 0; i < resultCount; i++)
                        {
                            dynamic groupInfo      = jsonData[i];
                            dynamic groupName      = groupInfo["group_name"];
                            dynamic groupId        = groupInfo["group_id"];
                            dynamic groupType      = groupInfo["group_management_type"][".tag"];
                            dynamic teamMemberId   = string.Empty;
                            dynamic email          = string.Empty;
                            dynamic emailVerified  = string.Empty;
                            dynamic status         = string.Empty;
                            dynamic membershipType = string.Empty;
                            dynamic joinedOn       = string.Empty;
                            dynamic accessType     = string.Empty;

                            //You can only get member profile info from user managed groups
                            if (groupType == "user_managed")
                            {
                                int memberCount = groupInfo["members"].Count;
                                for (int m = 0; m < memberCount; m++)
                                {
                                    teamMemberId   = groupInfo["members"][m]["profile"]["team_member_id"];
                                    email          = groupInfo["members"][m]["profile"]["email"];
                                    emailVerified  = Convert.ToString(groupInfo["members"][m]["profile"]["email_verified"]);
                                    status         = groupInfo["members"][m]["profile"]["status"][".tag"];
                                    membershipType = groupInfo["members"][m]["profile"]["membership_type"][".tag"];
                                    joinedOn       = Convert.ToString(groupInfo["members"][m]["profile"]["joined_on"]);
                                    accessType     = groupInfo["members"][m]["access_type"][".tag"];

                                    // update model
                                    GroupInfoItemModel lvItem1 = new GroupInfoItemModel()
                                    {
                                        GroupName      = groupName,
                                        GroupId        = groupId,
                                        GroupType      = groupType,
                                        TeamMemberId   = teamMemberId,
                                        Email          = email,
                                        EmailVerified  = emailVerified,
                                        Status         = status,
                                        MembershipType = membershipType,
                                        JoinedOn       = joinedOn,
                                        AccessType     = accessType
                                    };
                                    model.GroupInfo.Add(lvItem1);
                                }
                            }
                            if (groupType != "user_managed")
                            {
                                // update model
                                GroupInfoItemModel lvItem = new GroupInfoItemModel()
                                {
                                    GroupName = groupName,
                                    GroupId   = groupId,
                                    GroupType = groupType
                                };
                                model.GroupInfo.Add(lvItem);
                            }
                        }
                    }
                }
            }
        }
示例#17
0
        public IList <TeamListViewItemModel> SearchOwners(IPaperModel model, IMainPresenter presenter)
        {
            IList <TeamListViewItemModel> members = new List <TeamListViewItemModel>();

            if (!string.IsNullOrEmpty(model.AccessToken))
            {
                MemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);
                service.ListMembersUrl   = ApplicationResource.ActionListMembers;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.ListMembers(new MemberData()
                {
                    SearchLimit = ApplicationResource.SearchDefaultLimit
                }, model.AccessToken);

                if (SyncContext != null)
                {
                    SyncContext.Post(delegate {
                        presenter.UpdateProgressInfo("Searching users...");
                    }, null);
                }
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  data        = response.Data.ToString();
                        dynamic jsonData    = JsonConvert.DeserializeObject <dynamic>(data);
                        int     resultCount = jsonData["members"].Count;
                        int     total       = 0;
                        for (int i = 0; i < resultCount; i++)
                        {
                            dynamic profile  = jsonData["members"][i]["profile"];
                            dynamic idObj    = profile["team_member_id"];
                            dynamic emailObj = profile["email"];
                            dynamic status   = profile["status"];
                            if (status != null && (status[".tag"].ToString().Equals("active") || status[".tag"].ToString().Equals("suspended")))
                            {
                                string teamId = idObj.Value as string;
                                string email  = emailObj.Value as string;
                                // update model
                                TeamListViewItemModel lvItem = new TeamListViewItemModel()
                                {
                                    Email  = email,
                                    TeamId = teamId
                                };
                                members.Add(lvItem);
                            }
                            if (SyncContext != null)
                            {
                                SyncContext.Post(delegate {
                                    presenter.UpdateProgressInfo("Scanning Account(s): " + (++total));
                                }, null);
                            }
                            Thread.Sleep(1);
                        }
                        // collect more.
                        bool   hasMore = jsonData["has_more"];
                        string cursor  = jsonData["cursor"];

                        while (hasMore)
                        {
                            service.ListMembersContinuationUrl = ApplicationResource.ActionListMembersContinuation;
                            service.UserAgentVersion           = ApplicationResource.UserAgent;
                            IDataResponse responseCont = service.ListMembersContinuation(new MemberData()
                            {
                                Cursor = cursor
                            }, model.AccessToken);

                            string  dataCont     = responseCont.Data.ToString();
                            dynamic jsonDataCont = JsonConvert.DeserializeObject <dynamic>(dataCont);

                            int resultContCount = jsonDataCont["members"].Count;
                            for (int i = 0; i < resultContCount; i++)
                            {
                                dynamic profile  = jsonDataCont["members"][i]["profile"];
                                dynamic idObj    = profile["team_member_id"];
                                dynamic emailObj = profile["email"];
                                dynamic status   = profile["status"];

                                string teamId = idObj.Value as string;
                                string email  = emailObj.Value as string;

                                if (status != null && (status[".tag"].ToString().Equals("active") || status[".tag"].ToString().Equals("suspended")))
                                {
                                    // update model
                                    TeamListViewItemModel lvItem = new TeamListViewItemModel()
                                    {
                                        Email  = email,
                                        TeamId = teamId
                                    };
                                    members.Add(lvItem);
                                }
                                if (SyncContext != null)
                                {
                                    SyncContext.Post(delegate {
                                        presenter.UpdateProgressInfo("Scanning Account(s): " + (++total));
                                    }, null);
                                }
                                Thread.Sleep(1);
                            }
                            hasMore = jsonDataCont["has_more"];
                            cursor  = jsonDataCont["cursor"];
                        }
                    }
                }
            }
            return(members);
        }
示例#18
0
        private IList <PaperListViewItemModel> GetPaperDocs(IPaperModel model, IMainPresenter presenter, TeamListViewItemModel memberitem)
        {
            IMemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.ListPaperDocsUrl = ApplicationResource.ActionListPaperDocs;
            service.UserAgentVersion = ApplicationResource.UserAgent;
            string paperAccessToken = ApplicationResource.DefaultAccessToken;
            string memberId         = string.Empty;
            IList <PaperListViewItemModel> docIds = new List <PaperListViewItemModel>();

            //foreach (var memberitem in members)
            //{
            if (!string.IsNullOrEmpty(memberitem.TeamId))
            {
                memberId = memberitem.TeamId;
            }
            IDataResponse response = service.ListPaperDocs(new MemberData()
            {
                MemberId = memberId
            }, paperAccessToken);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                if (response.Data != null)
                {
                    string  data     = response.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    int resultCount = jsonData["doc_ids"].Count;
                    for (int i = 0; i < resultCount; i++)
                    {
                        dynamic paperDocId = jsonData["doc_ids"][i];

                        // update model
                        PaperListViewItemModel lvItem = new PaperListViewItemModel()
                        {
                            PaperId   = paperDocId,
                            MemberId  = memberId,
                            IsChecked = true
                        };
                        docIds.Add(lvItem);
                    }
                    //if the group count is above limit - default 1000 we need to grab the cursor and call continue
                    string cursor  = jsonData["cursor"]["value"];
                    bool   hasMore = jsonData["has_more"];
                    while (hasMore)
                    {
                        service.ListPaperDocsUrl = ApplicationResource.ActionListContinuationPaperDocs;
                        IDataResponse responseCont = service.ListPaperDocs(new MemberData()
                        {
                            Cursor = cursor
                        }, paperAccessToken);

                        string  dataCont     = responseCont.Data.ToString();
                        dynamic jsonDataCont = JsonConvert.DeserializeObject <dynamic>(dataCont);

                        int resultContCount = jsonDataCont["doc_ids"].Count;
                        for (int i = 0; i < resultContCount; i++)
                        {
                            dynamic paperDocId = jsonDataCont["doc_ids"][i];
                            // update model
                            PaperListViewItemModel lvItem = new PaperListViewItemModel()
                            {
                                PaperId   = paperDocId,
                                MemberId  = memberId,
                                IsChecked = true
                            };
                            docIds.Add(lvItem);
                        }
                        hasMore = jsonDataCont["has_more"];
                        cursor  = jsonDataCont["cursor"]["value"];
                    }
                }
            }
            return(docIds);
            //}
        }
示例#19
0
        private void GetPaperMetadata(IPaperModel model, IMainPresenter presenter, string docId, string memberId)
        {
            IMemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.GetPaperMetadataUrl = ApplicationResource.ActionGetPaperDocMetadata;
            service.UserAgentVersion    = ApplicationResource.UserAgent;
            string paperAccessToken = ApplicationResource.DefaultAccessToken;

            IMemberServices serviceFolderInfo = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            serviceFolderInfo.PaperDocFolderInfoUrl = ApplicationResource.ActionPaperDocFolderInfo;
            serviceFolderInfo.UserAgentVersion      = ApplicationResource.UserAgent;
            string folderPath = @"/";

            try
            {
                if (SyncContext != null)
                {
                    SyncContext.Post(delegate
                    {
                        presenter.UpdateProgressInfo(string.Format("Retrieving Paper doc metadata for id: {0}", docId));
                    }, null);
                }
                //get paper doc folder info to add to listview object
                IDataResponse responseFolderInfo = serviceFolderInfo.GetPaperDocFolderInfo(docId, paperAccessToken, memberId);
                if (responseFolderInfo.StatusCode == HttpStatusCode.OK)
                {
                    if (responseFolderInfo.Data != null)
                    {
                        string  data        = responseFolderInfo.Data.ToString();
                        dynamic jsonData    = JsonConvert.DeserializeObject <dynamic>(data);
                        int     resultCount = 0;

                        if (data != "{}")
                        {
                            resultCount = jsonData["folders"].Count;
                            for (int i = 0; i < resultCount; i++)
                            {
                                dynamic folders        = jsonData["folders"][i];
                                dynamic folderPathobj  = folders["name"];
                                string  folderPathNext = folderPathobj.Value as string;
                                folderPath = folderPath + folderPathNext + "/";
                            }
                        }
                    }
                }
                //now get remainder of metadata
                IDataResponse response = service.GetPaperMetadata(docId, paperAccessToken, memberId);
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  data     = response.Data.ToString();
                        dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                        dynamic paperDocIdobj      = jsonData["doc_id"];
                        dynamic ownerobj           = jsonData["owner"];
                        dynamic paperNameobj       = jsonData["title"];
                        dynamic createdDateobj     = jsonData["created_date"];
                        dynamic statusobj          = jsonData["status"][".tag"];
                        dynamic revisionobj        = jsonData["revision"];
                        dynamic lastUpdatedDateobj = jsonData["last_updated_date"];
                        dynamic lastEditorobj      = jsonData["last_editor"];

                        string   paperDocId  = paperDocIdobj.Value as string;
                        string   owner       = ownerobj.Value as string;
                        string   paperName   = paperNameobj.Value as string;
                        DateTime createdDate = DateTime.MinValue;
                        if (createdDateobj != null)
                        {
                            createdDate = createdDateobj;
                        }
                        string status   = statusobj.Value as string;
                        UInt64 revision = 0;
                        if (revisionobj != null)
                        {
                            revision = revisionobj;
                        }
                        DateTime lastUpdatedDate = DateTime.MinValue;
                        if (lastUpdatedDateobj != null)
                        {
                            lastUpdatedDate = lastUpdatedDateobj;
                        }
                        string lastEditor = lastEditorobj.Value as string;

                        // update model
                        PaperListViewItemModel lvItem = new PaperListViewItemModel()
                        {
                            PaperId         = paperDocId,
                            Owner           = owner,
                            PaperName       = paperName,
                            FolderPath      = folderPath,
                            CreatedDate     = createdDate,
                            Status          = status,
                            Revision        = revision,
                            LastUpdatedDate = lastUpdatedDate,
                            LastEditor      = lastEditor,
                            MemberId        = memberId,
                            IsChecked       = true
                        };
                        model.Paper.Add(lvItem);
                    }
                }
            }
            catch (Exception)
            {
                // error message.
                SyncContext.Post(delegate
                {
                    presenter.ShowErrorMessage(ErrorMessages.FAILED_TO_GET_PAPER_METADATA, ErrorMessages.DLG_DEFAULT_TITLE);
                    presenter.UpdateProgressInfo("");
                    presenter.ActivateSpinner(false);
                    presenter.EnableControl(true);
                }, null);
            }
        }
        private void ExportGroupPerms(IGroupsModel model, IMainPresenter presenter)
        {
            IMemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.ExportGroupPermsUrl = ApplicationResource.ActionSharingListFolderMembers;
            service.UserAgentVersion    = ApplicationResource.UserAgent;
            string memberId = string.Empty;

            foreach (var item in model.GroupInfo)
            {
                if (!string.IsNullOrEmpty(item.TeamMemberId))
                {
                    memberId = item.TeamMemberId;
                    break;
                }
            }
            List <Tuple <string, string, string, string> > sharedFolders = this.GetSharedFolders(model, presenter);

            foreach (var item in sharedFolders)
            {
                IDataResponse response = service.ExportGroupPerms(new MemberData()
                {
                    MemberId = memberId
                }, item.Item1, ApplicationResource.DefaultAccessToken);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  data        = response.Data.ToString();
                        dynamic jsonData    = JsonConvert.DeserializeObject <dynamic>(data);
                        int     resultCount = jsonData["groups"].Count;
                        for (int i = 0; i < resultCount; i++)
                        {
                            dynamic groups             = jsonData["groups"][i];
                            dynamic groupName          = Convert.ToString(groups["group"]["group_name"]);
                            dynamic groupId            = Convert.ToString(groups["group"]["group_id"]);
                            dynamic groupMgmtType      = Convert.ToString(groups["group"]["group_management_type"][".tag"]);
                            dynamic groupType          = Convert.ToString(groups["group"]["group_type"][".tag"]);
                            dynamic isMember           = Convert.ToString(groups["group"]["is_member"]);
                            dynamic isOwner            = Convert.ToString(groups["group"]["is_owner"]);
                            dynamic accessType         = Convert.ToString(groups["access_type"][".tag"]);
                            dynamic isInherited        = Convert.ToString(groups["is_inherited"]);
                            dynamic sharedFolderId     = item.Item1;
                            dynamic sharedFolderName   = item.Item2;
                            dynamic isInsideTeamFolder = item.Item3;
                            dynamic isTeamFolder       = item.Item4;

                            // update model
                            GroupPermsItemModel lvItem = new GroupPermsItemModel()
                            {
                                GroupName           = groupName,
                                GroupId             = groupId,
                                GroupManagementType = groupMgmtType,
                                GroupType           = groupType,
                                IsMember            = isMember,
                                IsOwner             = isOwner,
                                AccessType          = accessType,
                                SharedFolderName    = sharedFolderName,
                                SharedFolderId      = sharedFolderId,
                                IsInherited         = isInherited,
                                IsTeamFolder        = isTeamFolder,
                                IsInsideTeamFolder  = isInsideTeamFolder
                            };
                            model.GroupPerms.Add(lvItem);
                        }
                        //if the group count is above limit - default 1000 we need to grab the cursor and call continue
                        string cursor = jsonData["cursor"];

                        while (!string.IsNullOrEmpty(cursor))
                        {
                            service.ExportGroupPermsUrl = ApplicationResource.ActionSharingListFolderMembersContinuation;
                            IDataResponse responseCont = service.ExportGroupPerms(new MemberData()
                            {
                                MemberId = memberId,
                                Cursor   = cursor
                            }, item.Item1, model.AccessToken);

                            string  dataCont        = responseCont.Data.ToString();
                            dynamic jsonDataCont    = JsonConvert.DeserializeObject <dynamic>(dataCont);
                            int     resultCountCont = jsonDataCont["groups"].Count;
                            for (int i = 0; i < resultCountCont; i++)
                            {
                                dynamic groups             = jsonDataCont["groups"][i];
                                dynamic groupName          = Convert.ToString(groups["group"]["group_name"]);
                                dynamic groupId            = Convert.ToString(groups["group"]["group_id"]);
                                dynamic groupMgmtType      = Convert.ToString(groups["group"]["group_management_type"][".tag"]);
                                dynamic groupType          = Convert.ToString(groups["group"]["group_type"][".tag"]);
                                dynamic isMember           = Convert.ToString(groups["group"]["is_member"]);
                                dynamic isOwner            = Convert.ToString(groups["group"]["is_owner"]);
                                dynamic accessType         = Convert.ToString(groups["access_type"][".tag"]);
                                dynamic isInherited        = Convert.ToString(groups["is_inherited"]);
                                dynamic sharedFolderId     = item.Item1;
                                dynamic sharedFolderName   = item.Item2;
                                dynamic isInsideTeamFolder = item.Item3;
                                dynamic isTeamFolder       = item.Item4;

                                // update model
                                GroupPermsItemModel lvItem = new GroupPermsItemModel()
                                {
                                    GroupName           = groupName,
                                    GroupId             = groupId,
                                    GroupManagementType = groupMgmtType,
                                    GroupType           = groupType,
                                    IsMember            = isMember,
                                    IsOwner             = isOwner,
                                    AccessType          = accessType,
                                    SharedFolderName    = sharedFolderName,
                                    SharedFolderId      = sharedFolderId,
                                    IsInherited         = isInherited,
                                    IsTeamFolder        = isTeamFolder,
                                    IsInsideTeamFolder  = isInsideTeamFolder
                                };
                                model.GroupPerms.Add(lvItem);
                            }
                            cursor = jsonDataCont["cursor"];
                        }
                    }
                }
            }
        }
        private bool SearchFiles(
            IMemberServices service,
            TeamListViewItemModel item,
            IDumpUserContentModel model,
            IMainPresenter presenter)
        {
            bool filesAdded = false;

            try
            {
                service.ListFolderUrl    = ApplicationResource.ActionListFolder;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.ListFolders(
                    new MemberData()
                {
                    MemberId = item.TeamId
                }, model.UserAccessToken);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  content        = response.Data as string;
                        dynamic jsonDataSearch = JsonConvert.DeserializeObject <dynamic>(content);
                        int     entryCount     = 0;
                        if (jsonDataSearch["entries"] != null)
                        {
                            entryCount = jsonDataSearch["entries"].Count;
                        }
                        //remove existing file entries.
                        for (int i = model.MemberList.Count - 1; i >= 0; i--)
                        {
                            TeamListViewItemModel lvItem = model.MemberList[i];
                            if (lvItem.TeamId.Equals(item.TeamId))
                            {
                                model.MemberList.RemoveAt(i);
                            }
                        }
                        int total = 0;
                        for (int i = 0; i < entryCount; i++)
                        {
                            TeamListViewItemModel lvItem = null;
                            if (jsonDataSearch["entries"][i][".tag"].ToString().Equals("file"))
                            {
                                lvItem = new TeamListViewItemModel()
                                {
                                    Email     = item.Email,
                                    TeamId    = item.TeamId,
                                    FileName  = jsonDataSearch["entries"][i]["name"].ToString(),
                                    FilePath  = jsonDataSearch["entries"][i]["path_lower"].ToString(),
                                    FileSize  = FileUtil.FormatFileSize(Convert.ToInt64(jsonDataSearch["entries"][i]["size"].ToString())),
                                    IsChecked = true
                                };
                                lock (insertLock)
                                {
                                    model.MemberList.Add(lvItem);
                                }
                                SyncContext.Post(delegate
                                {
                                    presenter.UpdateProgressInfo(string.Format("Searching Files For : {0} File Count: {1}", item.Email, (++total)));
                                }, null);
                            }
                        }
                        if (entryCount > 0)
                        {
                            filesAdded = true;
                        }
                        bool   hasMore = jsonDataSearch["has_more"];
                        string cursor  = jsonDataSearch["cursor"];

                        while (hasMore)
                        {
                            service.ListFolderUrl    = ApplicationResource.ActionListFolderContinuation;
                            service.UserAgentVersion = ApplicationResource.UserAgent;
                            IDataResponse responseCont = service.ListFolders(
                                new MemberData()
                            {
                                MemberId = item.TeamId,
                                Cursor   = cursor
                            }, model.UserAccessToken);

                            string  contentCont        = responseCont.Data as string;
                            dynamic jsonDataSearchCont = JsonConvert.DeserializeObject <dynamic>(contentCont);

                            int entryCountCont = 0;
                            if (jsonDataSearchCont["entries"] != null)
                            {
                                entryCountCont = jsonDataSearchCont["entries"].Count;
                            }

                            int totalCont = 0;
                            for (int i = 0; i < entryCountCont; i++)
                            {
                                TeamListViewItemModel lvItem = null;
                                if (jsonDataSearchCont["entries"][i][".tag"].ToString().Equals("file"))
                                {
                                    lvItem = new TeamListViewItemModel()
                                    {
                                        Email     = item.Email,
                                        TeamId    = item.TeamId,
                                        FileName  = jsonDataSearchCont["entries"][i]["name"].ToString(),
                                        FilePath  = jsonDataSearchCont["entries"][i]["path_lower"].ToString(),
                                        FileSize  = FileUtil.FormatFileSize(Convert.ToInt64(jsonDataSearchCont["entries"][i]["size"].ToString())),
                                        IsChecked = true
                                    };
                                    lock (insertLock)
                                    {
                                        model.MemberList.Add(lvItem);
                                    }

                                    SyncContext.Post(delegate
                                    {
                                        presenter.UpdateProgressInfo(string.Format("Searching Files For : {0} File Count: {1}", item.Email, (++totalCont)));
                                    }, null);
                                }
                            }
                            if (entryCountCont > 0)
                            {
                                filesAdded = true;
                            }
                            hasMore = jsonDataSearchCont["has_more"];
                            cursor  = jsonDataSearchCont["cursor"];
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(filesAdded);
        }
        private void GetGroups(IGroupsModel model, IMainPresenter presenter)
        {
            IMemberServices service = service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.GetGroupsUrl     = ApplicationResource.ActionGetGroups;
            service.UserAgentVersion = ApplicationResource.UserAgent;
            IDataResponse response = service.GetGroups(new MemberData()
            {
            }, model.AccessToken);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                if (response.Data != null)
                {
                    string  data     = response.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    // clear existing data first
                    model.Groups.Clear();
                    int resultCount = jsonData["groups"].Count;
                    for (int i = 0; i < resultCount; i++)
                    {
                        dynamic groups      = jsonData["groups"][i];
                        dynamic groupName   = groups["group_name"];
                        dynamic groupType   = groups["group_management_type"][".tag"];
                        dynamic groupId     = groups["group_id"];
                        dynamic memberCount = groups["member_count"];

                        // update model
                        GroupListViewItemModel lvItem = new GroupListViewItemModel()
                        {
                            GroupName   = groupName,
                            GroupType   = groupType,
                            GroupId     = groupId,
                            MemberCount = memberCount
                        };
                        model.Groups.Add(lvItem);
                    }
                    //if the group count is above limit - default 1000 we need to grab the cursor and call continue
                    bool   hasMore = jsonData["has_more"];
                    string cursor  = jsonData["cursor"];

                    while (hasMore)
                    {
                        service.GetGroupsUrl = ApplicationResource.ActionGetGroupsContinuation;
                        IDataResponse responseCont = service.GetGroups(new MemberData()
                        {
                            Cursor = cursor
                        }, model.AccessToken);

                        string  dataCont     = responseCont.Data.ToString();
                        dynamic jsonDataCont = JsonConvert.DeserializeObject <dynamic>(dataCont);

                        int resultContCount = jsonDataCont["groups"].Count;
                        for (int i = 0; i < resultContCount; i++)
                        {
                            dynamic groups      = jsonDataCont["groups"][i];
                            dynamic groupName   = groups["group_name"];
                            dynamic groupType   = groups["group_management_type"][".tag"];
                            dynamic groupId     = groups["group_id"];
                            dynamic memberCount = groups["member_count"];

                            // update model
                            GroupListViewItemModel lvItem = new GroupListViewItemModel()
                            {
                                GroupName   = groupName,
                                GroupType   = groupType,
                                GroupId     = groupId,
                                MemberCount = memberCount
                            };
                            model.Groups.Add(lvItem);
                        }
                        hasMore = jsonDataCont["has_more"];
                        cursor  = jsonDataCont["cursor"];
                    }
                }
            }
        }
示例#23
0
        private bool SearchFiles(
            IMemberServices service,
            string memberId,
            ITextSearchModel model,
            string email,
            IMainPresenter presenter)
        {
            bool filesAdded     = false;
            bool SuppressStatus = ApplicationResource.SuppressFilenamesInStatus;

            try {
                service.SearchFilesUrl   = ApplicationResource.ActionFileSearch;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.SearchFiles(new MemberData()
                {
                    SearchText  = model.QueryString,
                    SearchLimit = ApplicationResource.SearchFileCountLimit,//model.SearchResultsLimit,
                    SearchMode  = model.GetSearchModeForService(),
                    MemberId    = memberId
                }, model.AccessToken);

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  data           = response.Data.ToString();
                        dynamic jsonDataSearch = JsonConvert.DeserializeObject <dynamic>(data);
                        if (jsonDataSearch["matches"] != null &&
                            jsonDataSearch["matches"].ToString() != "[]")
                        {
                            int matchCount = jsonDataSearch["matches"].Count;
                            for (int j = 0; j < matchCount; j++)
                            {
                                string pathLower = jsonDataSearch["matches"][j]["metadata"]["path_lower"];
                                // update model
                                MemberListViewItemModel item = new MemberListViewItemModel()
                                {
                                    Email    = email,
                                    Path     = pathLower,
                                    MemberId = memberId
                                };
                                // add searched members to list.
                                model.MemberList.Add(item);

                                SyncContext.Post(delegate {
                                    if (!SuppressStatus)
                                    {
                                        presenter.UpdateProgressInfo(string.Format("Member: {0} File : {1}", email, item.Path));
                                    }
                                    else
                                    {
                                        presenter.UpdateProgressInfo(string.Format("Member: {0} File : Suppressing filename status...", email));
                                    }
                                }, null);
                            }

                            if (matchCount > 0)
                            {
                                filesAdded = true;
                            }
                        }
                    }
                }
            } catch (Exception e) {
                Console.WriteLine(e.Message);
            }
            return(filesAdded);
        }
示例#24
0
 public CustomApiResult(IDataResponse result)
 {
     _result = result;
 }
        private void SearchItems(
            IMemberServices service,
            TeamListViewItemModel owner,
            IDataMigrationModel model,
            IMainPresenter presenter)
        {
            bool SuppressStatus = ApplicationResource.SuppressFilenamesInStatus;
            bool complete       = false;

            //remove when done debugging
            exceptionCount = 0;
            try
            {
                while (!complete)
                {
                    service.ListFolderUrl    = ApplicationResource.ActionListFolder;
                    service.UserAgentVersion = ApplicationResource.UserAgent;
                    IDataResponse response = service.ListFolders(
                        new MemberData()
                    {
                        MemberId = owner.TeamId
                    }, model.AccessToken);
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        if (response.Data != null)
                        {
                            string  content        = response.Data as string;
                            dynamic jsonDataSearch = JsonConvert.DeserializeObject <dynamic>(content);
                            IDictionary <string, long> folderMap = new Dictionary <string, long>();
                            int entryCount = jsonDataSearch["entries"].Count;
                            int foundTotal = 0;
                            for (int i = 0; i < entryCount; i++)
                            {
                                dynamic entry = jsonDataSearch["entries"][i];
                                string  type  = entry[".tag"].ToString();
                                ContentDisplayListViewItemModel lvItem = null;
                                if (type.Equals("folder"))
                                {
                                    lvItem = new ContentDisplayListViewItemModel()
                                    {
                                        ItemType        = type,
                                        Email           = owner.Email,
                                        MemberId        = owner.TeamId,
                                        FirstName       = owner.FirstName,
                                        LastName        = owner.LastName,
                                        ItemName        = entry["name"].ToString(),
                                        ItemPath        = entry["path_lower"].ToString(),
                                        ItemPathDisplay = entry["path_display"].ToString(),
                                        ItemSizeByte    = 0
                                    };
                                }
                                else
                                {
                                    string serverModified     = entry["server_modified"].ToString();
                                    string serverModifiedDate = string.Empty;
                                    if (!string.IsNullOrEmpty(serverModified))
                                    {
                                        DateTime lastModified = DateTime.SpecifyKind(
                                            DateTime.Parse(serverModified),
                                            DateTimeKind.Utc
                                            );
                                        serverModifiedDate = lastModified.ToString("dd MMM yyyy");
                                    }
                                    string fileSizeStr = jsonDataSearch["entries"][i]["size"].ToString();
                                    long   fileSize    = 0;
                                    long.TryParse(fileSizeStr, out fileSize);
                                    lvItem = new ContentDisplayListViewItemModel()
                                    {
                                        ItemType        = type,
                                        Email           = owner.Email,
                                        MemberId        = owner.TeamId,
                                        FirstName       = owner.FirstName,
                                        LastName        = owner.LastName,
                                        ItemName        = entry["name"].ToString(),
                                        ItemPath        = entry["path_lower"].ToString(),
                                        ItemPathDisplay = entry["path_display"].ToString(),
                                        ItemSize        = FileUtil.FormatFileSize(fileSize),
                                        ItemSizeByte    = fileSize,
                                        LastModified    = serverModifiedDate,
                                        Uploaded        = serverModifiedDate,
                                        Created         = serverModifiedDate
                                    };
                                }
                                lock (insertLock)
                                {
                                    model.Contents.Add(lvItem);
                                }
                                if (SyncContext != null)
                                {
                                    SyncContext.Post(delegate
                                    {
                                        if (!SuppressStatus)
                                        {
                                            presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, lvItem.ItemName, (++foundTotal), entryCount));
                                        }
                                        else
                                        {
                                            presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, "Suppressing filename status", (++foundTotal), entryCount));
                                        }
                                    }, null);
                                }
                            }
                            bool   hasMore = jsonDataSearch["has_more"];
                            string cursor  = jsonDataSearch["cursor"];

                            while (hasMore)
                            {
                                service.ListFolderUrl = ApplicationResource.ActionListFolderContinuation;
                                IDataResponse responseCont = service.ListFolders(
                                    new MemberData()
                                {
                                    MemberId = owner.TeamId,
                                    Cursor   = cursor
                                }, model.AccessToken);

                                string  contentCont        = responseCont.Data as string;
                                dynamic jsonDataSearchCont = JsonConvert.DeserializeObject <dynamic>(contentCont);
                                IDictionary <string, long> folderMapCont = new Dictionary <string, long>();
                                int entryCountCont = jsonDataSearchCont["entries"].Count;
                                int foundTotalCont = 0;
                                for (int i = 0; i < entryCountCont; i++)
                                {
                                    dynamic entry = jsonDataSearchCont["entries"][i];
                                    string  type  = entry[".tag"].ToString();
                                    ContentDisplayListViewItemModel lvItem = null;
                                    if (type.Equals("folder"))
                                    {
                                        lvItem = new ContentDisplayListViewItemModel()
                                        {
                                            ItemType        = type,
                                            Email           = owner.Email,
                                            MemberId        = owner.TeamId,
                                            FirstName       = owner.FirstName,
                                            LastName        = owner.LastName,
                                            ItemName        = entry["name"].ToString(),
                                            ItemPath        = entry["path_lower"].ToString(),
                                            ItemPathDisplay = entry["path_display"].ToString(),
                                            ItemSizeByte    = 0
                                        };
                                    }
                                    else
                                    {
                                        string serverModified     = entry["server_modified"].ToString();
                                        string serverModifiedDate = string.Empty;
                                        if (!string.IsNullOrEmpty(serverModified))
                                        {
                                            DateTime lastModified = DateTime.SpecifyKind(
                                                DateTime.Parse(serverModified),
                                                DateTimeKind.Utc
                                                );
                                            serverModifiedDate = lastModified.ToString("dd MMM yyyy");
                                        }
                                        string fileSizeStr = jsonDataSearchCont["entries"][i]["size"].ToString();
                                        long   fileSize    = 0;
                                        long.TryParse(fileSizeStr, out fileSize);
                                        lvItem = new ContentDisplayListViewItemModel()
                                        {
                                            ItemType        = type,
                                            Email           = owner.Email,
                                            MemberId        = owner.TeamId,
                                            FirstName       = owner.FirstName,
                                            LastName        = owner.LastName,
                                            ItemName        = entry["name"].ToString(),
                                            ItemPath        = entry["path_lower"].ToString(),
                                            ItemPathDisplay = entry["path_display"].ToString(),
                                            ItemSize        = FileUtil.FormatFileSize(fileSize),
                                            ItemSizeByte    = fileSize,
                                            LastModified    = serverModifiedDate,
                                            Uploaded        = serverModifiedDate,
                                            Created         = serverModifiedDate
                                        };
                                    }
                                    lock (insertLock)
                                    {
                                        model.Contents.Add(lvItem);
                                    }
                                    if (SyncContext != null)
                                    {
                                        SyncContext.Post(delegate
                                        {
                                            if (!SuppressStatus)
                                            {
                                                presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, lvItem.ItemName, (++foundTotalCont), entryCountCont));
                                            }
                                            else
                                            {
                                                presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, "Suppressing filename status", (++foundTotalCont), entryCountCont));
                                            }
                                        }, null);
                                    }
                                }
                                hasMore = jsonDataSearchCont["has_more"];
                                cursor  = jsonDataSearchCont["cursor"];
                            }
                        }
                        complete = true;
                    }
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        //error from API
                        if (response.Data != null)
                        {
                            string  data     = response.Data.ToString();
                            dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);
                            if (data == "")
                            {
                                complete = false;
                                retryCount++;
                            }
                        }
                        else
                        {
                            //response.Data is null so let's retry
                            complete = false;
                            retryCount++;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                exceptionCount++;
                Console.WriteLine(ex.Message);
            }
        }
        private void RefreshHealth(ITeamHealthModel model, IMainPresenter presenter)
        {
            string fileAccessToken = ApplicationResource.DefaultAccessToken;
            //set default values so we have something
            int    licensed                = 0;
            int    provisioned             = 0;
            string name                    = string.Empty;
            string activityStartDate       = string.Empty;
            int    adds                    = 0;
            int    edits                   = 0;
            int    deletes                 = 0;
            int    activeSharedFolders7Day = 0;
            int    activeUsers7Day         = 0;
            string devicesStartDate        = string.Empty;
            int    windows                 = 0;
            int    macos                   = 0;
            int    linux                   = 0;
            int    ios              = 0;
            int    android          = 0;
            int    other            = 0;
            int    total            = 0;
            string storageStartDate = string.Empty;
            UInt64 totalStorage     = 0;
            UInt64 sharedStorage    = 0;
            UInt64 unsharedStorage  = 0;
            int    sharedFolders    = 0;

            IMemberServices service = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            service.GetInfoUrl       = ApplicationResource.ActionGetInfo;
            service.UserAgentVersion = ApplicationResource.UserAgent;
            IDataResponse response = service.GetInfo(fileAccessToken);

            IMemberServices serviceActivity = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            serviceActivity.GetActivityUrl   = ApplicationResource.ActionGetActivity;
            serviceActivity.UserAgentVersion = ApplicationResource.UserAgent;
            IDataResponse responseActivity = serviceActivity.GetActivity(fileAccessToken);

            IMemberServices serviceDevices = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            serviceDevices.GetDevicesReportUrl = ApplicationResource.ActionGetDevices;
            serviceDevices.UserAgentVersion    = ApplicationResource.UserAgent;
            IDataResponse responseDevices = serviceDevices.GetDevicesReport(fileAccessToken);

            IMemberServices serviceStorage = new MemberServices(ApplicationResource.BaseUrl, ApplicationResource.ApiVersion);

            serviceStorage.GetStorageUrl    = ApplicationResource.ActionGetStorage;
            serviceStorage.UserAgentVersion = ApplicationResource.UserAgent;
            IDataResponse responseStorage = serviceStorage.GetStorage(fileAccessToken);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                if (response.Data != null)
                {
                    string  data     = response.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    name                   = jsonData["name"];
                    licensed               = jsonData["num_licensed_users"];
                    provisioned            = jsonData["num_provisioned_users"];
                    model.TeamName         = name;
                    model.LicensedUsers    = licensed.ToString();
                    model.ProvisionedUsers = provisioned.ToString();
                }
            }
            if (responseActivity.StatusCode == HttpStatusCode.OK)
            {
                if (responseActivity.Data != null)
                {
                    string  data     = responseActivity.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    activityStartDate = jsonData["start_date"];
                    if (jsonData["adds"][0] != null)
                    {
                        try
                        {
                            int  availableData = 1;
                            bool complete      = false;
                            while (!complete)
                            {
                                if (((jsonData["adds"].Count) - availableData) != null)
                                {
                                    int addsCount = (jsonData["adds"].Count) - availableData;
                                    if (jsonData["adds"][addsCount] != null)
                                    {
                                        adds     = jsonData["adds"][addsCount];
                                        complete = true;
                                    }
                                }
                                availableData++;
                            }
                        }
                        catch
                        {
                            adds = 0;
                        }
                    }
                    if (jsonData["edits"][0] != null)
                    {
                        try
                        {
                            int  availableData = 1;
                            bool complete      = false;
                            while (!complete)
                            {
                                if (((jsonData["edits"].Count) - availableData) != null)
                                {
                                    int editsCount = (jsonData["edits"].Count) - availableData;
                                    if (jsonData["edits"][editsCount] != null)
                                    {
                                        edits = jsonData["edits"][editsCount];
                                    }
                                    complete = true;
                                }
                                availableData++;
                            }
                        }
                        catch
                        {
                            edits = 0;
                        }
                    }
                    if (jsonData["deletes"][0] != null)
                    {
                        try
                        {
                            int  availableData = 1;
                            bool complete      = false;
                            while (!complete)
                            {
                                if (((jsonData["deletes"].Count) - availableData) != null)
                                {
                                    int deletesCount = (jsonData["deletes"].Count) - availableData;
                                    if (jsonData["deletes"][deletesCount] != null)
                                    {
                                        deletes = jsonData["deletes"][deletesCount];
                                    }
                                    complete = true;
                                }
                                availableData++;
                            }
                        }
                        catch
                        {
                            deletes = 0;
                        }
                    }
                    if (jsonData["active_shared_folders_7_day"][0] != null)
                    {
                        try
                        {
                            int  availableData = 1;
                            bool complete      = false;
                            while (!complete)
                            {
                                if (((jsonData["active_shared_folders_7_day"].Count) - availableData) != null)
                                {
                                    int activeSharedCount = (jsonData["active_shared_folders_7_day"].Count) - availableData;
                                    if (jsonData["active_shared_folders_7_day"][activeSharedCount] != null)
                                    {
                                        activeSharedFolders7Day = jsonData["active_shared_folders_7_day"][activeSharedCount];
                                    }
                                    complete = true;
                                }
                                availableData++;
                            }
                        }
                        catch
                        {
                            activeSharedFolders7Day = 0;
                        }
                    }
                    if (jsonData["active_users_7_day"][0] != null)
                    {
                        try
                        {
                            int  availableData = 1;
                            bool complete      = false;
                            while (!complete)
                            {
                                if (((jsonData["active_users_7_day"].Count) - availableData) != null)
                                {
                                    int activeUsers = (jsonData["active_users_7_day"].Count) - availableData;
                                    if (jsonData["active_users_7_day"][activeUsers] != null)
                                    {
                                        activeUsers7Day = jsonData["active_users_7_day"][activeUsers];
                                    }
                                    complete = true;
                                }
                                availableData++;
                            }
                        }
                        catch
                        {
                            activeUsers7Day = 0;
                        }
                    }
                    model.Adds    = adds.ToString();
                    model.Edits   = edits.ToString();
                    model.Deletes = deletes.ToString();
                    model.ActiveSharedFolders7Day = activeSharedFolders7Day.ToString();
                    model.ActiveUsers7Day         = activeUsers7Day.ToString();
                }
            }
            if (responseDevices.StatusCode == HttpStatusCode.OK)
            {
                if (responseDevices.Data != null)
                {
                    string  data     = responseDevices.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    devicesStartDate = jsonData["start_date"];
                    if (jsonData["active_7_day"] != null)
                    {
                        if (jsonData["active_7_day"]["windows"][0] != null)
                        {
                            try
                            {
                                int  availableData = 1;
                                bool complete      = false;
                                while (!complete)
                                {
                                    if (((jsonData["active_7_day"]["windows"].Count) - availableData) != null)
                                    {
                                        int windowsUsers = (jsonData["active_7_day"]["windows"].Count) - availableData;
                                        if (jsonData["active_7_day"]["windows"][windowsUsers] != null)
                                        {
                                            windows = jsonData["active_7_day"]["windows"][windowsUsers];
                                        }
                                        complete = true;
                                    }
                                    availableData++;
                                }
                            }
                            catch
                            {
                                windows = 0;
                            }
                        }
                        if (jsonData["active_7_day"]["macos"][0] != null)
                        {
                            try
                            {
                                int  availableData = 1;
                                bool complete      = false;
                                while (!complete)
                                {
                                    if (((jsonData["active_7_day"]["macos"].Count) - availableData) != null)
                                    {
                                        int macosUsers = (jsonData["active_7_day"]["macos"].Count) - availableData;
                                        if (jsonData["active_7_day"]["macos"][macosUsers] != null)
                                        {
                                            macos = jsonData["active_7_day"]["macos"][macosUsers];
                                        }
                                        complete = true;
                                    }
                                    availableData++;
                                }
                            }
                            catch
                            {
                                macos = 0;
                            }
                        }
                        if (jsonData["active_7_day"]["linux"][0] != null)
                        {
                            try
                            {
                                int  availableData = 1;
                                bool complete      = false;
                                while (!complete)
                                {
                                    if (((jsonData["active_7_day"]["linux"].Count) - availableData) != null)
                                    {
                                        int linuxUsers = (jsonData["active_7_day"]["linux"].Count) - availableData;
                                        if (jsonData["active_7_day"]["linux"][linuxUsers] != null)
                                        {
                                            linux = jsonData["active_7_day"]["linux"][linuxUsers];
                                        }
                                        complete = true;
                                    }
                                    availableData++;
                                }
                            }
                            catch
                            {
                                linux = 0;
                            }
                        }
                        if (jsonData["active_7_day"]["ios"][0] != null)
                        {
                            try
                            {
                                int  availableData = 1;
                                bool complete      = false;
                                while (!complete)
                                {
                                    if (((jsonData["active_7_day"]["ios"].Count) - availableData) != null)
                                    {
                                        int iosUsers = (jsonData["active_7_day"]["ios"].Count) - availableData;
                                        if (jsonData["active_7_day"]["ios"][iosUsers] != null)
                                        {
                                            ios = jsonData["active_7_day"]["ios"][iosUsers];
                                        }
                                        complete = true;
                                    }
                                    availableData++;
                                }
                            }
                            catch
                            {
                                ios = 0;
                            }
                        }
                        if (jsonData["active_7_day"]["android"][0] != null)
                        {
                            try
                            {
                                int  availableData = 1;
                                bool complete      = false;
                                while (!complete)
                                {
                                    if (((jsonData["active_7_day"]["android"].Count) - availableData) != null)
                                    {
                                        int androidUsers = (jsonData["active_7_day"]["android"].Count) - availableData;
                                        if (jsonData["active_7_day"]["android"][androidUsers] != null)
                                        {
                                            android = jsonData["active_7_day"]["android"][androidUsers];
                                        }
                                        complete = true;
                                    }
                                    availableData++;
                                }
                            }
                            catch
                            {
                                android = 0;
                            }
                        }
                        if (jsonData["active_7_day"]["other"][0] != null)
                        {
                            try
                            {
                                int  availableData = 1;
                                bool complete      = false;
                                while (!complete)
                                {
                                    if (((jsonData["active_7_day"]["other"].Count) - availableData) != null)
                                    {
                                        int otherUsers = (jsonData["active_7_day"]["other"].Count) - availableData;
                                        if (jsonData["active_7_day"]["other"][otherUsers] != null)
                                        {
                                            other = jsonData["active_7_day"]["other"][otherUsers];
                                        }
                                        complete = true;
                                    }
                                    availableData++;
                                }
                            }
                            catch
                            {
                                other = 0;
                            }
                        }
                        if (jsonData["active_7_day"]["total"][0] != null)
                        {
                            try
                            {
                                int  availableData = 1;
                                bool complete      = false;
                                while (!complete)
                                {
                                    if (((jsonData["active_7_day"]["total"].Count) - availableData) != null)
                                    {
                                        int totalUsers = (jsonData["active_7_day"]["total"].Count) - availableData;
                                        if (jsonData["active_7_day"]["total"][totalUsers] != null)
                                        {
                                            total = jsonData["active_7_day"]["total"][totalUsers];
                                        }
                                        complete = true;
                                    }
                                    availableData++;
                                }
                            }
                            catch
                            {
                                total = 0;
                            }
                        }
                    }
                    model.windows = windows.ToString();
                    model.macos   = macos.ToString();
                    model.linux   = linux.ToString();
                    model.ios     = ios.ToString();
                    model.android = android.ToString();
                    model.other   = other.ToString();
                    model.total   = total.ToString();
                }
            }
            if (responseStorage.StatusCode == HttpStatusCode.OK)
            {
                if (responseStorage.Data != null)
                {
                    string  data     = responseStorage.Data.ToString();
                    dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);

                    storageStartDate = jsonData["start_date"];
                    if (jsonData["total_usage"][0] != null)
                    {
                        int  availableData = 1;
                        bool complete      = false;
                        while (!complete)
                        {
                            if (((jsonData["total_usage"].Count) - availableData) != null)
                            {
                                int totalCount = (jsonData["total_usage"].Count) - availableData;
                                if (jsonData["total_usage"][totalCount] != null)
                                {
                                    totalStorage = jsonData["total_usage"][totalCount];
                                    double totalStorageDec = FileUtil.FormatFileSizeTB(totalStorage);
                                    model.TotalUsage = totalStorageDec.ToString() + " TB";
                                    complete         = true;
                                }
                            }
                            availableData++;
                        }
                    }
                    if (jsonData["shared_usage"][0] != null)
                    {
                        int  availableData = 1;
                        bool complete      = false;
                        while (!complete)
                        {
                            if (((jsonData["shared_usage"].Count) - availableData) != null)
                            {
                                int sharedCount = (jsonData["shared_usage"].Count) - availableData;
                                if (jsonData["shared_usage"][sharedCount] != null)
                                {
                                    sharedStorage = jsonData["shared_usage"][sharedCount];
                                    double sharedStorageDec = FileUtil.FormatFileSizeTB(sharedStorage);
                                    model.SharedUsage = sharedStorageDec.ToString() + " TB";
                                    complete          = true;
                                }
                            }
                            availableData++;
                        }
                    }
                    if (jsonData["unshared_usage"][0] != null)
                    {
                        int  availableData = 1;
                        bool complete      = false;
                        while (!complete)
                        {
                            if (((jsonData["unshared_usage"].Count) - availableData) != null)
                            {
                                int unsharedCount = (jsonData["unshared_usage"].Count) - availableData;
                                if (jsonData["unshared_usage"][unsharedCount] != null)
                                {
                                    unsharedStorage = jsonData["unshared_usage"][unsharedCount];
                                    double unsharedStorageDec = FileUtil.FormatFileSizeTB(unsharedStorage);
                                    model.UnsharedUsage = unsharedStorageDec.ToString() + " TB";
                                    complete            = true;
                                }
                            }
                            availableData++;
                        }
                    }
                    if (jsonData["shared_folders"][0] != null)
                    {
                        int  availableData = 1;
                        bool complete      = false;
                        while (!complete)
                        {
                            if (((jsonData["shared_usage"].Count) - availableData) != null)
                            {
                                int sharedFolderCount = (jsonData["shared_folders"].Count) - availableData;
                                if (jsonData["shared_folders"][sharedFolderCount] != null)
                                {
                                    sharedFolders       = jsonData["shared_folders"][sharedFolderCount];
                                    model.SharedFolders = sharedFolders.ToString();
                                    complete            = true;
                                }
                            }
                            availableData++;
                        }
                    }
                }
            }
            if (responseStorage.StatusCode != HttpStatusCode.OK)
            {
                //if Dropbox gives back Internal Server error, bug filed from engineering on this
                model.TotalUsage    = "N/A";
                model.SharedUsage   = "N/A";
                model.UnsharedUsage = "N/A";
                model.SharedFolders = "N/A";
            }
            model.RefreshDateTime = DateTime.Now;
        }
示例#27
0
 public GetValues(
     IDataResponse data)
 {
     Data = data;
 }