예제 #1
0
        public void Register(string email)
        {
            Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(email),
                "Invalid email address, cannot be null or empty.");
            
            var client = new RestClient(Host.Url);

            try
            {
                client.AddParameter("user[email]", email);
                client.AddParameter("module[InstallType]", EnabledFeatures.InstallType());
                client.AddParameter("module[ProfCompareModule]", EnabledFeatures.CompareEnabled.ToString());
                client.AddParameter("module[ProfReviewModule]", EnabledFeatures.ReviewEnabled.ToString());
                client.AddParameter("module[ProfProtectModule]", EnabledFeatures.SecurityEnabled.ToString());
                client.AddParameter("module[ProfSecureFileTransferModule]",
                    EnabledFeatures.SecureFileTransferEnabled.ToString());
                client.AddParameter("module[ProfHummingbirdModule]", EnabledFeatures.HummingbirdEnabled.ToString());
                client.AddParameter("module[ProfInterwovenModule]", EnabledFeatures.InterwovenEnabled.ToString());
                client.AddParameter("module[ProfSharePointModule]", EnabledFeatures.SharePointEnabled.ToString());
                client.AddParameter("module[ProfNetDocumentsModule]", EnabledFeatures.NetDocumentsEnabled.ToString());

                client.Post("/api/v1.3/sign_ups/create_by_email.json");
            }
            catch (Exception)
            {
                if (client.Json != null)
                {
                    if (client.Json.Contains("resource_validation_error"))
                        throw new SecurityException("Password is too short (must be at least 4 characters)");
                }
                throw;
            }

        }
예제 #2
0
        public void SetPermissions(IPlatformPermissions attributes)
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.AddParameter("permission[can_access_anonymously]", attributes.CanAccessAnonymously.ToString().ToLower());
            client.AddParameter("permission[can_invite_with_link]", attributes.CanInvite.ToString().ToLower());
            client.AddParameter("permission[can_download_original]", attributes.CanDownload.ToString().ToLower());
            client.AddParameter("permission[can_upload_changes]", attributes.CanUploadChanges.ToString().ToLower());
            client.AddParameter("permission[can_manipulate]", attributes.CanManipulate.ToString().ToLower());
            client.AddParameter("permission[inherits_from_parent]", attributes.InheritsFromParent.ToString().ToLower());
            client.Put(string.Format("/api/v1.2/folders/{0}/permission.json", Id));

            var client2 = new RestClient(Host.Url, Session.Cookies);
            client2.AddParameter("folder[notify_owner]", attributes.NotifyOwner.ToString().ToLower());

            if (attributes.ExpiryDate.HasValue && attributes.ExpiryDate.Value.Year < 9999 && attributes.ExpiryDate.Value.Year > 1)
            {
                // Also add this expiry date.
                var expiry = attributes.ExpiryDate.Value.ToString("yyyy-MM-dd HH:mm:ss UTC");
                client2.AddParameter("folder[expires_at]", expiry);
            }
            else
            {
                client2.AddParameter("folder[expires_at]", "");
            }
            client2.Put(string.Format("/api/v1.2/folders/{0}.json", Id));
        }
        private void WorkerFunc()
        {
            try
            {
                var client = new RestClient(Host.Url, Session.Cookies);
                var res = client.Get("push_settings.json?ctype=mobile");
                var queryString = client.Content.SelectToken("query_string").Value<string>();

                var url = string.Format(@"https://notification-service-{0}{1}", Host.Uri.Host, queryString);

                _socket = new SocketIOClient.Client(url);

                _socket.Message += socket_MessageReceived;
                _socket.Error += socket_Error;
                _socket.Opened += socket_Opened;
                _socket.Connect();

            }
            catch (OperationCanceledException)
            {
                IsStarted = false;
            }
            catch (Exception ex)
            {
                IsStarted = false;
                Logger.LogError(ex);
                throw;
            }

        }
예제 #4
0
        public List<IPlatformGroup> Get()
        {
            var groups = new List<IPlatformGroup>();
            var page = 1;
            var more = false;

            do
            {
                var client = new RestClient(Host.Url, Session.Cookies);
                client.AddParameter("page", page.ToString());
                client.Get("/groups-api/api/v1.0/groups.json");

                var jsonGroups = client.Content.SelectToken("groups");
                foreach (var jsonGroup in jsonGroups)
                {
                    groups.Add(new PlatformGroup(jsonGroup));
                }

                var pagination = client.Content.SelectToken("pagination");
                more = pagination.SelectToken("current_page").Value<int>() < pagination.SelectToken("total_pages").Value<int>();

                page++;

            } while (more);
            

            

            return groups;
        }
예제 #5
0
        public void Rename(string newName)
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.AddParameter("folder[name]", newName);
            client.Put(string.Format("/api/v1.2/folders/{0}.json", Id));

            this.Name = newName;
        }
예제 #6
0
 public string Invite(string fileToken, string groupUuid)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.EncodeParametersAsJson = true;
     client.AddParameter("fileToken", fileToken);
     client.AddParameter("groupUuid", groupUuid);
     var response = client.Post("/groups-api/api/v1.0/invite.json");
     return response.Headers.Location.ToString();
 }
예제 #7
0
 public IPlatformGroup Create(string name)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.EncodeParametersAsJson = true;
     client.AddParameter("name", name);
     client.AddParameter("audience", "PRIVATE");
     client.Post("/groups-api/api/v1.0/groups.json");
     return Get().Find(x => x.Name == name);
 }
예제 #8
0
 private IPlatformComment Add(string body, int fileId, int fileVersion, long replyToId)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.AddParameter("comment[body]", body);
     client.AddParameter("comment[file_id]", fileId);
     client.AddParameter("comment[file_version]", fileVersion);
     client.AddParameter("comment[slide_number]", 1);
     if (replyToId > 0) client.AddParameter("comment[reply_to_id]", replyToId);
     client.Post("/api/v1.2/comments.json");
     return new PlatformComment(Session, User, client.Content);
 }
예제 #9
0
 public IEnumerable<IPlatformUser> GetMembers(int folderid)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Get(string.Format("/api/v1.2/folders/{0}/members/ancestry.json", folderid));
     var members = client.Content.SelectToken("members");
     var res = new List<IPlatformUser>();
     foreach (var member in members)
     {
         res.Add(new PlatformUser(Session,member));
     }
     return res;
 }
예제 #10
0
 public Bitmap GetAvatar()
 {
     var avatarFile = Path.Combine(_cache, User.Uuid);
     if (!File.Exists(avatarFile))
     {
         var client = new RestClient(Host.Url, Session.Cookies);
         client.AddParameter("token", User.Uuid);
         var response = client.Get("/api/v1.2/users/find_by_token.json");
         response.EnsureSuccessStatusCode();
         var url = client.Content.First.SelectToken("avatar").Value<string>();
         var webClient = new WebClient();
         webClient.DownloadFile(url, avatarFile);
     }
     return new Bitmap(avatarFile);
 }
예제 #11
0
        public List<IPlatformFolder> Get()
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.AddParameter("with_files", 0);
            client.Get("/api/v1.2/folders.json");

            var jsonFolders = client.Content.SelectToken("folders");
            var folders = new List<IPlatformFolder>();

            foreach (var jsonFolder in jsonFolders)
            {
                folders.Add(new PlatformFolder(Session, User, null, jsonFolder));
            }
            return folders;
        }
예제 #12
0
        public IPlatformUser Authenticate(string email, string password)
        {
            using (var handler = new HttpClientHandler())
            using (var client = new HttpClient(handler) { BaseAddress = new Uri(Host.Url) })
            {
                var parameters = new FormUrlEncodedContent(new[]
                                                        {
                                                            new KeyValuePair<string, string>("user_session[email]",
                                                                email),
                                                            new KeyValuePair<string, string>("user_session[password]",
                                                                password),
                                                            new KeyValuePair<string, string>("device[app_uid]",
                                                                "WorkshareProtect")

                                                        });
                var response = client.PostAsync("/api/v1.3/user_sessions.json", parameters).Result;
                if ((int)response.StatusCode == 422)
                    throw new UnauthorizedAccessException("Invalid user name or password.");

                response.EnsureSuccessStatusCode();
                Session.Cookies = handler.CookieContainer;

                var content = response.Content.ReadAsStringAsync().Result;

                var parsedContent = JObject.Parse(content);
                User.DeviceToken = parsedContent.SelectToken("device_auth_token").Value<string>();

                var client2 = new RestClient(Host.Url, handler.CookieContainer);
                client2.AddParameter("with_files", 0);
                client2.Get("/api/v1.2/folders.json");

                var jsonFolders = client2.Content.SelectToken("folders");
                foreach (var jsonFolder in jsonFolders)
                {
                    var parentId = jsonFolder.SelectToken("parent_id").Value<long?>();
                    if (!parentId.HasValue)
                    {
                        User.Uuid = jsonFolder.SelectToken("owner").SelectToken("uuid").Value<string>();
                        User.Id = jsonFolder.SelectToken("owner").SelectToken("id").Value<string>();
                        User.Email = jsonFolder.SelectToken("owner").SelectToken("email").Value<string>();
                        return User;
                    }
                }

                return User;
            }
        }
예제 #13
0
        public IPlatformFolder GetMyFilesFolder()
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.AddParameter("with_files", 0);
            client.Get("/api/v1.2/folders.json");

            var jsonFolders = client.Content.SelectToken("folders");
            foreach (var jsonFolder in jsonFolders)
            {
                var parentId = jsonFolder.SelectToken("parent_id").Value<long?>();
                if (!parentId.HasValue)
                {
                    return new PlatformFolder(Session, User,  null, jsonFolder);       
                }
            }

            throw new InvalidOperationException("My files folder does not exist.");
        }
예제 #14
0
        public IEnumerable<IPlatformNotification> GetForFile(int fileId, bool unread)
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.AddParameter("file_id", fileId);
            if (unread)
            {
                client.AddParameter("unread", "true");    
            }
            client.Get("api/v1.2/notifications.json");
            var activitiesToken = client.Content.SelectToken("activities");
            var res = new List<IPlatformNotification>();
            foreach (var avtivityToken in activitiesToken)
            {
                res.Add(new PlatformNotification(Session, User, avtivityToken));
            }

            return res;
        }
예제 #15
0
        public IPlatformFolder Create(string name, string parentId, IPlatformPermissions attributes)
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.AddParameter("folder[name]", name);
            client.AddParameter("folder[description]", "");
            client.AddParameter("folder[notify_owner]", attributes.NotifyOwner.ToString());
            client.AddParameter("folder[parent_id]", parentId);
            client.AddParameter("rewrite_folder_ids", "false");

            if (attributes.ExpiryDate.HasValue && attributes.ExpiryDate.Value.Year < 9999 &&
                attributes.ExpiryDate.Value.Year > 1)
            {
                client.AddParameter("folder[expires_at]", attributes.ExpiryDate.Value.ToString("yyyy-MM-dd HH:mm:ss UTC"));
            }

            client.Post("/api/v1.2/folders.json");

            return new PlatformFolder(Session, User, null, client.Content);
        }
예제 #16
0
        public IEnumerable<IPlatformComment> GetByFile(int fileId, int version)
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.AddParameter("file_id", fileId);
            if (version > 0)
            {
                client.AddParameter("file_version", version);
            }
            client.Get("/api/v1.2/comments.json");

            var comments = new List<IPlatformComment>();

            var jsonFolders = client.Content;
            foreach (var jsonComment in jsonFolders)
            {
                comments.Add(new PlatformComment(Session, User, jsonComment));
            }

            return comments;
        }
예제 #17
0
        public void Register(string email, string password)
        {
            var client = new RestClient(Host.Url);
            client.AddParameter("start_trial", "false");
            client.AddParameter("user[email]", email);
            client.AddParameter("user[password]", password);
            client.AddParameter("user[password_confirmation]", password);
            client.AddParameter("user[first_name]", email);
            client.AddParameter("user[last_name]", string.Empty);
            client.AddParameter("module[InstallType]", EnabledFeatures.InstallType());
            client.AddParameter("module[ProfCompareModule]", EnabledFeatures.CompareEnabled.ToString());
            client.AddParameter("module[ProfReviewModule]", EnabledFeatures.ReviewEnabled.ToString());
            client.AddParameter("module[ProfProtectModule]", EnabledFeatures.SecurityEnabled.ToString());
            client.AddParameter("module[ProfSecureFileTransferModule]",
                EnabledFeatures.SecureFileTransferEnabled.ToString());
            client.AddParameter("module[ProfHummingbirdModule]", EnabledFeatures.HummingbirdEnabled.ToString());
            client.AddParameter("module[ProfInterwovenModule]", EnabledFeatures.InterwovenEnabled.ToString());
            client.AddParameter("module[ProfSharePointModule]", EnabledFeatures.SharePointEnabled.ToString());
            client.AddParameter("module[ProfNetDocumentsModule]", EnabledFeatures.NetDocumentsEnabled.ToString());

            client.Post("/api/v1.3/sign_ups.json");
        }
예제 #18
0
        public IPlatformUser GetCurrentUser()
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.Get("/api/v1.3/current_user.json");

            var user = new PlatformUser(Session)
            {
                Id = client.Content.SelectToken("id").Value<string>(),
                Email = client.Content.SelectToken("email").Value<string>().ToLower(),
                AccountId = 
                    client.Content.SelectToken("account").SelectToken("id").Value<string>(),
                Plan =
                    client.Content.SelectToken("account")
                    .SelectToken("plan_name")
                    .Value<string>()
            };

            return user;

            //var client = new RestClient(Host.Url);
            //var request = CreateRequest("/api/v1.3/current_user.json", Method.GET);
            //var response = client.Execute(request);

            //ResponsePolicy.Validate(response);

            //var parsedContent = JObject.Parse(response.Content);

            //var user = new PlatformUser
            //           {
            //               Id = parsedContent.SelectToken("id").Value<string>(),
            //               Email = parsedContent.SelectToken("email").Value<string>(),
            //               AccountId =
            //                   parsedContent.SelectToken("account").SelectToken("id").Value<string>(),
            //               Plan =
            //                   parsedContent.SelectToken("account")
            //                   .SelectToken("plan_name")
            //                   .Value<string>()
            //           };

            //return user;
        }
예제 #19
0
 public void VisitFile(int fileId)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.AddParameter("visit[file_id]",fileId);
     client.Post(string.Format("/api/v1.2/visits.json"));
 }
예제 #20
0
 public IPlatformComment GetById(long commentId)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Get(string.Format("/api/v1.2/comments/{0}.json", commentId));
     return new PlatformComment(Session, User, client.Content);
 }
예제 #21
0
        private IPlatformUser AuthenticateWithDeviceToken()
        {
            if (!string.IsNullOrEmpty(User.DeviceToken))
            {
                try
                {
                    var client = new RestClient(Host.Url);
                    client.AddCookie(new Cookie("device_credentials", User.DeviceToken));
                    client.AddParameter("includes", "a.profile");
                    var response = client.Get("/api/v1.3/current_user.json");
                    if (response.IsSuccessStatusCode)
                    {
                        Session.Cookies = client.CookieContainer;
                        User.IsDeactivated = client.Content.SelectToken("is_deactivated").Value<bool>();
                        User.AccountId = client.Content.SelectToken("account").SelectToken("id").Value<string>();
                        User.Uuid = client.Content.SelectToken("uuid").Value<string>();
                        User.Email = client.Content.SelectToken("email").Value<string>();
                        User.Account = new PlatformAccount(Session, client.Content.SelectToken("account"));

                        if (User.IsDeactivated)
                            throw new UnauthorizedAccessException("The account has been deactivated.");


                        return User;
                    }
                }
                catch (Exception e)
                {
                    Logger.LogError(e);
                }

            }
            return null;
        }
예제 #22
0
 public IPlatformComment Edit(string body, long commentid)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.AddParameter("comment[body]", body);
     client.Put(string.Format("/api/v1.2/comments/{0}.json", commentid));
     return new PlatformComment(Session, User, client.Content);
 }
예제 #23
0
 public void Delete(long commentid)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Delete(string.Format("/api/v1.2/comments/{0}.json", commentid));
 }
예제 #24
0
 public void AddMember(string email)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.AddParameter("member[user_email]", email);
     client.Post(string.Format("/api/v1.2/folders/{0}/members.json", Id));
 }
예제 #25
0
 public IPlatformPermissions GetPermissions()
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Get(string.Format("/api/v1.2/folders/{0}.json", Id));
     return new PlatformPermissions(client.Content, client.Content.SelectToken("permissions"));
 }
예제 #26
0
        public List<IPlatformUser> GetMembers()
        {
            var client = new RestClient(Host.Url, Session.Cookies);
            client.Get(string.Format("/api/v1.2/folders/{0}/members.json", Id));

            var users = new List<IPlatformUser>();
            var members = client.Content.SelectToken("members");
          
            foreach (var member in members)
            {
                users.Add(new PlatformUser(Session, member));
            }

            if (users.All(x => string.Compare(x.Email, Owner.Email, true) != 0))
            {
                users.Add(Owner);
            }

            return users;
        }
예제 #27
0
 public void Download(Stream outstream, int fileId, int versionId)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Download(string.Format("/api/v1.2/files/{0}/download?version={1}", fileId, versionId), outstream);
 }
예제 #28
0
 public IPlatformFile Get(int fileId)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Get(string.Format("/api/v1.2/files/{0}.json", fileId));
     return new PlatformFile(Session, User, client.Content);
 }
예제 #29
0
 public IPlatformVersion GetVersion(int versionId)
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Get(string.Format("/api/v1.2/file_versions/{0}.json", versionId));
     return new PlatformVersion(Session, User, client.Content,-1);
 }
예제 #30
0
 public void Delete()
 {
     var client = new RestClient(Host.Url, Session.Cookies);
     client.Delete(string.Format("/api/v1.2/folders/{0}.json", Id));
 }