/// <summary>
 /// https://developers.podio.com/doc/spaces/get-space-by-url-22481
 /// </summary>
 public Space GetSpaceByUrl(string url)
 {
     return(PodioRestHelper.Request <Space>(Constants.PODIOAPI_BASEURL + "/space/url", _client.AuthInfo.AccessToken, new Dictionary <string, string>()
     {
         { "url", url }
     }).Data);
 }
Example #2
0
        /// <summary>
        /// https://developers.podio.com/doc/items/get-items-27803
        /// </summary>
        public PodioCollection <Item> GetItems(int appId, int limit, int offset, KeyValuePair <string, string>?key = null, bool?remembered = null, string sortBy = null, bool?sortDesc = null, int?viewId = null)
        {
            Dictionary <string, string> args = new Dictionary <string, string>();

            args.Add("limit", limit.ToString());
            args.Add("offset", offset.ToString());

            if (key.HasValue)
            {
                args.Add(key.Value.Key, key.Value.Value);
            }

            if (remembered != null)
            {
                args.Add("remembered", remembered.ToString());
            }

            if (!string.IsNullOrEmpty(sortBy))
            {
                args.Add("sort_by", sortBy);
            }
            if (sortDesc != null)
            {
                args.Add("sort_desc", sortDesc.ToString());
            }
            if (viewId != null)
            {
                args.Add("view_id", viewId.ToString());
            }

            return(PodioRestHelper.Request <PodioCollection <Item> >(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, args).Data);
        }
Example #3
0
 /// <summary>
 /// https://developers.podio.com/doc/tasks/update-task-10583674
 /// </summary>
 public void UpdateTask(int taskId, CreateUpdateRequest requestData)
 {
     PodioRestHelper.JSONRequest <Task>(Constants.PODIOAPI_BASEURL + "/task/" + taskId,
                                        _client.AuthInfo.AccessToken,
                                        requestData,
                                        PodioRestHelper.RequestMethod.PUT);
 }
 /// <summary>
 /// https://developers.podio.com/doc/organizations/get-organization-by-url-22384
 /// </summary>
 public Organization GetOrganizationByURL(string url)
 {
     return(PodioRestHelper.Request <Organization>(Constants.PODIOAPI_BASEURL + "/org/url", _client.AuthInfo.AccessToken, new Dictionary <string, string>()
     {
         { "url", url }
     }).Data);
 }
Example #5
0
 /// <summary>
 /// https://developers.podio.com/doc/tasks/delete-task-77179
 /// </summary>
 public PodioRestHelper.PodioResponse DeleteTasks(IEnumerable <int> taskIds)
 {
     return(PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/task/" + String.Join(",", taskIds.Select(id => id.ToString()).ToArray()),
                                        _client.AuthInfo.AccessToken,
                                        null,
                                        PodioRestHelper.RequestMethod.DELETE));
 }
 /// <summary>
 /// https://developers.podio.com/doc/spaces/get-top-spaces-22477
 /// </summary>
 public IEnumerable <Space> GetTopSpaces(int limit)
 {
     return(PodioRestHelper.Request <List <Space> >(Constants.PODIOAPI_BASEURL + "/space/top/", _client.AuthInfo.AccessToken, new Dictionary <string, string>()
     {
         { "limit", limit.ToString() }
     }).Data);
 }
Example #7
0
 /// <summary>
 /// https://developers.podio.com/doc/tasks/complete-task-22432
 /// </summary>
 public PodioRestHelper.PodioResponse CompleteTask(int taskId)
 {
     return(PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/task/" + taskId + "/complete",
                                    _client.AuthInfo.AccessToken,
                                    null,
                                    PodioRestHelper.RequestMethod.POST));
 }
 /// <summary>
 /// https://developers.podio.com/doc/spaces/update-space-22391
 /// </summary>
 public void UpdateSpace(int spaceId, UpdateRequest requestData)
 {
     PodioRestHelper.PodioResponse t = PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/space/" + spaceId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT);
     if (t.PodioError != null)
     {
         throw new Exceptions.PodioResponseException(t.PodioError.error_description, t.PodioError);
     }
 }
Example #9
0
        /// <summary>
        /// https://developers.podio.com/doc/stream/get-space-stream-80039
        /// </summary>
        public IEnumerable <StreamObject> GetSpaceStream(int spaceId, int limit, int offset)
        {
            Dictionary <string, string> _args = new Dictionary <string, string>();

            _args.Add("limit", limit.ToString());
            _args.Add("offset", offset.ToString());
            return(PodioRestHelper.Request <List <StreamObject> >(Constants.PODIOAPI_BASEURL + "/stream/space/" + spaceId + "/", _client.AuthInfo.AccessToken, _args).Data);
        }
Example #10
0
        /// <summary>
        /// https://developers.podio.com/doc/files/upload-file-1004361
        /// </summary>
        public FileAttachment UploadFile(byte[] data, string filename, string mimetype)
        {
            var requestData = new Dictionary <string, object> {
                { "filename", filename },
                { "source", new Podio.API.Utils.PodioRestHelper.FileParameter(data, filename, mimetype) }
            };

            return(PodioRestHelper.MultipartFormDataRequest <FileAttachment>(Constants.PODIOAPI_BASEURL + "/file/v2/", _client.AuthInfo.AccessToken, requestData).Data);
        }
Example #11
0
        /// <summary>
        /// https://developers.podio.com/doc/items/get-item-22360
        /// </summary>
        public Item GetItem(int itemId, bool markAsViewed = true)
        {
            Dictionary <string, string> args = new Dictionary <string, string>()
            {
                { "mark_as_viewed", markAsViewed.ToString() }
            };

            return(PodioRestHelper.Request <Item>(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data);
        }
Example #12
0
        /// <summary>
        /// https://developers.podio.com/doc/embeds/add-an-embed-726483
        /// </summary>
        public Embed AddAnEmbed(string url)
        {
            var requestData = new CreateRequest()
            {
                Url = url
            };

            return(PodioRestHelper.JSONRequest <Embed>(Constants.PODIOAPI_BASEURL + "/embed/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data);
        }
Example #13
0
        /// <summary>
        /// https://developers.podio.com/doc/tasks/get-task-77949
        /// </summary>
        public IEnumerable <Task> GetTasksDelegatedFrom(int userId)
        {
            Dictionary <string, string> _args = new Dictionary <string, string>();

            _args.Add("completed", "0");
            _args.Add("responsible", "0");
            _args.Add("created_by", "user:"******"/task/", _client.AuthInfo.AccessToken, _args).Data);
        }
Example #14
0
        /// <summary>
        /// https://developers.podio.com/doc/tasks/update-task-description-76982
        /// </summary>
        public void UpdateTaskDescription(int taskId, string description)
        {
            var rq = new CreateUpdateRequest();

            rq.Description = description;
            PodioRestHelper.JSONRequest <Task>(Constants.PODIOAPI_BASEURL + "/task/" + taskId + "/description",
                                               _client.AuthInfo.AccessToken,
                                               rq,
                                               PodioRestHelper.RequestMethod.PUT);
        }
Example #15
0
        /// <summary>
        /// https://developers.podio.com/doc/tasks/update-task-text-22428
        /// </summary>
        public void UpdateTaskText(int taskId, string text)
        {
            var rq = new CreateUpdateRequest();

            rq.Text = text;
            PodioRestHelper.JSONRequest <Task>(Constants.PODIOAPI_BASEURL + "/task/" + taskId + "/text",
                                               _client.AuthInfo.AccessToken,
                                               rq,
                                               PodioRestHelper.RequestMethod.PUT);
        }
Example #16
0
        /// <summary>
        /// https://developers.podio.com/doc/tasks/update-task-due-on-3442633
        /// </summary>
        public void UpdateTaskDue(int taskId, DateTime date, bool dateOnly = false)
        {
            var rq = new CreateUpdateRequest();

            rq.DueDate = date.ToString("yyyy-MM-dd");
            if (!dateOnly)
            {
                rq.DueTime = date.ToString("HH:mm");
            }
            PodioRestHelper.JSONRequest <Task>(Constants.PODIOAPI_BASEURL + "/task/" + taskId + "/due",
                                               _client.AuthInfo.AccessToken,
                                               rq,
                                               PodioRestHelper.RequestMethod.PUT);
        }
Example #17
0
        public Contact GetUserContact(string mail)
        {
            Contact contact = null;
            Dictionary <string, string> _args = new Dictionary <string, string>();

            _args.Add("mail", mail);
            _args.Add("contact_type", "user");
            _args.Add("limit", "1");

            List <Contact> contacts = PodioRestHelper.Request <List <Contact> >(Constants.PODIOAPI_BASEURL + "/contact/", _client.AuthInfo.AccessToken, _args).Data;

            if (contacts != null && contacts.Count > 0)
            {
                return(contacts[0]);
            }
            return(contact);
        }
Example #18
0
 /// <summary>
 /// https://developers.podio.com/doc/tasks/create-task-22419
 /// or
 /// https://developers.podio.com/doc/tasks/create-task-with-reference-22420
 /// </summary>
 public Task AddNewTask(CreateUpdateRequest requestData, string ref_type = null, int?ref_id = null, bool silent = false)
 {
     if (!String.IsNullOrEmpty(ref_type) && ref_id.HasValue)
     {
         return(PodioRestHelper.JSONRequest <Task>(Constants.PODIOAPI_BASEURL + "/task/" + ref_type + "/" + ref_id.ToString() + "/",
                                                   _client.AuthInfo.AccessToken,
                                                   requestData,
                                                   PodioRestHelper.RequestMethod.POST).Data);
     }
     else
     {
         return(PodioRestHelper.JSONRequest <Task>(Constants.PODIOAPI_BASEURL + "/task/",
                                                   _client.AuthInfo.AccessToken,
                                                   requestData,
                                                   PodioRestHelper.RequestMethod.POST).Data);
     }
 }
Example #19
0
        private void ValidateConnection()
        {
            if (this._authinfo.TimeObtained.AddSeconds(this._authinfo.ExpiresIn) < DateTime.Now.AddSeconds(-10))
            {
                string requestUri = Constants.PODIOAPI_BASEURL + "/oauth/token";
                Dictionary <string, string> _requestbody = new Dictionary <string, string>()
                {
                    { "grant_type", "refresh_token" },
                    { "client_id", clientId },
                    { "client_secret", clientSecret },
                    { "refresh_token", _authinfo.RefreshToken }
                };

                this._authinfo = PodioRestHelper.Request <AuthorizationAccessToken>(requestUri, _requestbody, PodioRestHelper.RequestMethod.POST).Data;
                this._authinfo.TimeObtained = DateTime.Now; // mark the date and time obtained
            }
        }
Example #20
0
        /// <summary>
        /// Connecting as a User does not require that you have authorized the application.
        /// </summary>
        /// <param name="client_id">Your programs Id in podio</param>
        /// <param name="client_secret">The super secret and nasty guid Podio created</param>
        /// <param name="username">Your podio loginname (usually your email)</param>
        /// <param name="password">Podio enforces strong passwords of at least 8 characters length - old users can have shorter and unsafe passwords</param>
        /// <returns></returns>
        public static Client ConnectAsUser(string client_id, string client_secret, string username, string password)
        {
            // authenticate the username and password.
            string requestUri = Constants.PODIOAPI_BASEURL + "/oauth/token";

            Dictionary <string, string> _requestbody = new Dictionary <string, string>()
            {
                { "grant_type", "password" },
                { "username", username },
                { "password", password },
                { "client_id", client_id },
                { "client_secret", client_secret }
            };

            var _response = PodioRestHelper.Request <AuthorizationAccessToken>(requestUri, _requestbody, PodioRestHelper.RequestMethod.POST).Data;

            _response.TimeObtained = DateTime.Now;

            return(new Client(_response, client_id, client_secret));
        }
Example #21
0
        /// <summary>
        /// Connecting with the Authorization code requires that you have authorized using the "Server-side flow" and use
        /// the returned "code" that is the result of the authorization.
        ///
        /// Rememeber that this is a one-time enjoyment and that you should hold on to the clients AuthorizationAccessToken if you want to
        /// keep your APP's ability to be re-authorized.
        /// </summary>
        /// <param name="app_id"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public static Client ConnectWithAuthorizationCode(string clientId, string clientSecret, string authorizationCode, string redirectUri)
        {
            // authenticate the username and password.
            string requestUri = Constants.PODIOAPI_BASEURL + "/oauth/token";

            // grant_type=authorization_code&client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&client_secret=YOUR_APP_SECRET&code=THE_AUTHORIZATION_CODE
            Dictionary <string, string> _requestbody = new Dictionary <string, string>()
            {
                { "grant_type", "authorization_code" },
                { "client_id", clientId },
                { "client_secret", clientSecret },
                { "code", authorizationCode },
                { "redirect_uri", redirectUri }
            };

            var _response = PodioRestHelper.Request <AuthorizationAccessToken>(requestUri, _requestbody, PodioRestHelper.RequestMethod.POST).Data;

            _response.TimeObtained = DateTime.Now;

            return(new Client(_response, clientId, clientSecret));
        }
Example #22
0
        /// <summary>
        /// Connecting as an app requires that you have authorized the app using the "Server-side flow" use the returned "code" that
        /// is the result of this interaction.
        /// </summary>
        /// <param name="app_id"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public static Client ConnectAsApp(string clientId, string clientSecret, string podioAppId, string podioAppToken, string redirectUri)
        {
            // validate that the accessToken is valid.
            //grant_type=app&app_id=YOUR_PODIO_APP_ID&app_token=YOUR_PODIO_APP_TOKEN&client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&client_secret=YOUR_APP_SECRET

            // authenticate the username and password.
            string requestUri = Constants.PODIOAPI_BASEURL + "/oauth/token";

            Dictionary <string, string> _requestbody = new Dictionary <string, string>()
            {
                { "grant_type", "app" },
                { "client_id", clientId },
                { "client_secret", clientSecret },
                { "app_id", podioAppId },
                { "app_token", podioAppToken },
                { "redirect_uri", redirectUri }
            };
            var _response = PodioRestHelper.Request <AuthorizationAccessToken>(requestUri, _requestbody, PodioRestHelper.RequestMethod.POST).Data;

            _response.TimeObtained = DateTime.Now;

            return(new Client(_response, clientId, clientSecret));
        }
 /// <summary>
 /// https://developers.podio.com/doc/spaces/get-space-by-org-and-url-label-476929
 /// </summary>
 public Space GetSpaceByOrgAndURLLabel(int orgId, string urlLabel)
 {
     return(PodioRestHelper.Request <Space>(Constants.PODIOAPI_BASEURL + "/space/org/" + orgId + "/" + urlLabel, _client.AuthInfo.AccessToken).Data);
 }
 /// <summary>
 /// https://developers.podio.com/doc/spaces/create-space-22390
 /// </summary>
 public CreatedResponse CreateSpace(CreateRequest requestData)
 {
     return(PodioRestHelper.JSONRequest <CreatedResponse>(Constants.PODIOAPI_BASEURL + "/space/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data);
 }
Example #25
0
 /// <summary>
 /// https://developers.podio.com/doc/items/delete-item-s-22364
 /// </summary>
 public PodioRestHelper.PodioResponse DeleteItems(IEnumerable <int> itemIds, bool silent = false)
 {
     return(PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE));
 }
Example #26
0
 /// <summary>
 /// https://developers.podio.com/doc/items/update-item-22363
 /// </summary>
 public void UpdateItem(int itemId, CreateUpdateRequest requestData)
 {
     PodioRestHelper.JSONRequest <Item>(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT);
 }
Example #27
0
 /// <summary>
 /// https://developers.podio.com/doc/items/add-new-item-22362
 /// </summary>
 public Item AddNewItem(int appId, CreateUpdateRequest requestData)
 {
     return(PodioRestHelper.JSONRequest <Item>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data);
 }
Example #28
0
 /// <summary>
 /// https://developers.podio.com/doc/items/add-new-item-22362
 /// </summary>
 public PodioCollection <Item> FilterItems(int appId, FilterRequest requestData)
 {
     return(PodioRestHelper.JSONRequest <PodioCollection <Item> >(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data);
 }
 /// <summary>
 /// https://developers.podio.com/doc/spaces/get-available-spaces-1911961
 /// </summary>
 public IEnumerable <Space> GetAvailableSpaces(int orgId)
 {
     return(PodioRestHelper.Request <List <Space> >(Constants.PODIOAPI_BASEURL + "/space/org/" + orgId + "/available/", _client.AuthInfo.AccessToken).Data);
 }
 public PodioResponseException(string message, PodioRestHelper.PodioError error) : base(message)
 {
     Error = error;
 }
 /// <summary>
 /// https://developers.podio.com/doc/spaces/get-space-22389
 /// </summary>
 public Space GetSpace(int spaceId)
 {
     return(PodioRestHelper.Request <Space>(Constants.PODIOAPI_BASEURL + "/space/" + spaceId, _client.AuthInfo.AccessToken).Data);
 }