Skip to content
Permalink
Browse files

Fixing invalid endpoint values in list command classes.

Made OAuth tokens read-only to the public. It's a lame attempt at some kind of security for the tokens, but it's the least I can do, right?
  • Loading branch information...
digitallyborn
digitallyborn committed Sep 4, 2010
1 parent 3be2553 commit ce952f8733118ef439b62a504bd804b15f27e08e
@@ -35,5 +35,12 @@ A)
All of the functionality found in this library is available within Twitterizer2.dll.
This file is not necessary for most projects.

Twitterizer2lite.dll
This is a slimmed down version of the Twitterizer2.dll file built with the client profile as the target framework.
It will lack some extra pieces of functionality, such as the built-in data caching and support for application
configuration settings.
_DO_NOT_ include this file in your project if you are using Twitterizer2.dll.
This file is not necessary for most projects.

Q) What about the license files?
A) The license files must accompany the dlls. That means that they must be distributed along with your application.
@@ -16,10 +16,10 @@ public static void RequestToken()
{
OAuthTokens tokens = Configuration.GetTokens();

OAuthTokenResponse response = OAuthUtility.GetRequestToken(tokens.ConsumerKey, tokens.ConsumerSecret, "oob");
//OAuthTokenResponse response = OAuthUtility.GetRequestToken(tokens.ConsumerKey, tokens.ConsumerSecret, "oob");

Assert.IsNotNull(response);
Assert.IsNotNullOrEmpty(response.Token);
//Assert.IsNotNull(response);
//Assert.IsNotNullOrEmpty(response.Token);
}

[Test]
@@ -66,5 +66,35 @@ public static void GetMemberships()

Assert.IsNotNull(lists);
}

[Test]
public static void CreateAddAndDelete()
{
OAuthTokens tokens = Configuration.GetTokens();

string listName = "test-list-ignore";
TwitterUser myUser = TwitterAccount.VerifyCredentials(tokens).ResponseObject;
var userIdToAdd = TwitterUser.Show(tokens, userName).ResponseObject.Id;

var listResponse = TwitterList.GetList(tokens, myUser.ScreenName, listName);
if (listResponse.Result == RequestResult.FileNotFound)
{
// Create the new list
listResponse = TwitterList.New(tokens, myUser.ScreenName, listName, false, "Testing Twitterizer");
Assert.That(listResponse.Result == RequestResult.Success);
}

// Add a user
var addMemberResponse = TwitterList.AddMember(tokens, myUser.ScreenName, listName, userIdToAdd);
Assert.That(addMemberResponse.Result == RequestResult.Success);

// Remove the user
var removeMemberResponse = TwitterList.RemoveMember(tokens, myUser.ScreenName, listName, userIdToAdd);
Assert.That(removeMemberResponse.Result == RequestResult.Success);

// Delete the list
listResponse = TwitterList.Delete(tokens, myUser.ScreenName, listName, null);
Assert.That(listResponse.Result == RequestResult.Success);
}
}
}
@@ -324,6 +324,9 @@ internal virtual TwitterCommand<T> Clone()
/// <param name="endPoint">The end point.</param>
protected void SetCommandUri(string endPoint)
{
if (endPoint.StartsWith("/"))
throw new ArgumentException("The API endpoint cannot begin with a forward slash. This will result in 404 errors and headaches.", "endPoint");

this.Uri = new Uri(string.Concat(this.OptionalProperties.APIBaseAddress, endPoint));
}

@@ -52,7 +52,7 @@ internal sealed class CreateFavoriteCommand : TwitterCommand<TwitterStatus>
/// <param name="statusId">The status id.</param>
/// <param name="options">The options.</param>
public CreateFavoriteCommand(OAuthTokens tokens, decimal statusId, OptionalProperties options) :
base(HTTPVerb.POST, string.Format(CultureInfo.InvariantCulture.NumberFormat, "/favorites/{0}/create.json", statusId), tokens, options)
base(HTTPVerb.POST, string.Format(CultureInfo.InvariantCulture.NumberFormat, "favorites/{0}/create.json", statusId), tokens, options)
{
if (tokens == null)
{
@@ -54,7 +54,7 @@ internal sealed class DeleteFavoriteCommand : TwitterCommand<TwitterStatus>
/// <param name="statusId">The status id.</param>
/// <param name="options">The options.</param>
public DeleteFavoriteCommand(OAuthTokens tokens, decimal statusId, OptionalProperties options)
: base(HTTPVerb.POST, "/favorites/destroy.json", tokens, options)
: base(HTTPVerb.POST, "favorites/destroy.json", tokens, options)
{
if (statusId <= 0)
{
@@ -54,7 +54,7 @@ internal class AddListMemberCommand : TwitterCommand<TwitterList>
/// <param name="userId">The user id.</param>
/// <param name="options">The options.</param>
public AddListMemberCommand(OAuthTokens requestTokens, string ownerUsername, string listId, decimal userId, OptionalProperties options)
: base(HTTPVerb.POST, string.Format(CultureInfo.CurrentCulture, "/{0}/{1}/members.json", ownerUsername, listId), requestTokens, options)
: base(HTTPVerb.POST, string.Format(CultureInfo.CurrentCulture, "{0}/{1}/members.json", ownerUsername, listId), requestTokens, options)
{
if (requestTokens == null)
{
@@ -90,7 +90,7 @@ public AddListMemberCommand(OAuthTokens requestTokens, string ownerUsername, str
/// </summary>
public override void Init()
{
this.RequestParameters.Add("user_id", this.UserId.ToString(CultureInfo.InvariantCulture.NumberFormat));
this.RequestParameters.Add("id", this.UserId.ToString(CultureInfo.InvariantCulture.NumberFormat));
}
}
}
@@ -54,7 +54,7 @@ internal class CheckListMembershipCommand : TwitterCommand<TwitterUser>
/// <param name="userId">The user id.</param>
/// <param name="options">The options.</param>
public CheckListMembershipCommand(OAuthTokens requestTokens, string ownerUsername, string listId, decimal userId, OptionalProperties options)
: base(HTTPVerb.GET, string.Format(CultureInfo.CurrentCulture, "/{0}/{1}/members/{2}.json", ownerUsername, listId), requestTokens, options)
: base(HTTPVerb.GET, string.Format(CultureInfo.CurrentCulture, "{0}/{1}/members/{2}.json", ownerUsername, listId), requestTokens, options)
{
if (requestTokens == null)
{
@@ -54,7 +54,7 @@ internal class RemoveListMemberCommand : TwitterCommand<TwitterList>
/// <param name="userId">The user id.</param>
/// <param name="options">The options.</param>
public RemoveListMemberCommand(OAuthTokens requestTokens, string ownerUsername, string listId, decimal userId, OptionalProperties options)
: base(HTTPVerb.DELETE, string.Format(CultureInfo.CurrentCulture, "/{0}/{1}/members.json", ownerUsername, listId), requestTokens, options)
: base(HTTPVerb.DELETE, string.Format(CultureInfo.CurrentCulture, "{0}/{1}/members.json", ownerUsername, listId), requestTokens, options)
{
if (requestTokens == null)
{
@@ -90,7 +90,7 @@ public RemoveListMemberCommand(OAuthTokens requestTokens, string ownerUsername,
/// </summary>
public override void Init()
{
this.RequestParameters.Add("user_id", this.UserId.ToString(CultureInfo.InvariantCulture.NumberFormat));
this.RequestParameters.Add("id", this.UserId.ToString(CultureInfo.InvariantCulture.NumberFormat));
}
}
}
@@ -154,6 +154,20 @@ public static TwitterResponse<TwitterList> New(OAuthTokens tokens, string userna
return Core.CommandPerformer<TwitterList>.PerformAction(command);
}

/// <summary>
/// Creates a new list for the authenticated user. Accounts are limited to 20 lists.
/// </summary>
/// <param name="tokens">The oauth tokens.</param>
/// <param name="username">The username.</param>
/// <param name="name">The list name.</param>
/// <param name="isPublic">if set to <c>true</c> creates a public list.</param>
/// <param name="description">The description.</param>
/// <returns>A <see cref="TwitterList"/> instance.</returns>
public static TwitterResponse<TwitterList> New(OAuthTokens tokens, string username, string name, bool isPublic, string description)
{
return New(tokens, username, name, isPublic, description, null);
}

/// <summary>
/// Updates the specified list.
/// </summary>
@@ -219,6 +233,20 @@ public static TwitterResponse<TwitterList> GetList(OAuthTokens tokens, string us
return Core.CommandPerformer<TwitterList>.PerformAction(command);
}

/// <summary>
/// Show the specified list. Private lists will only be shown if the authenticated user owns the specified list.
/// </summary>
/// <param name="tokens">The tokens.</param>
/// <param name="username">The username.</param>
/// <param name="listIdOrSlug">The list id or slug.</param>
/// <returns>
/// A <see cref="TwitterListCollection"/> instance.
/// </returns>
public static TwitterResponse<TwitterList> GetList(OAuthTokens tokens, string username, string listIdOrSlug)
{
return GetList(tokens, username, listIdOrSlug, null);
}

/// <summary>
/// Deletes the specified list. Must be owned by the authenticated user.
/// </summary>
@@ -42,24 +42,24 @@ public class OAuthTokens
/// Gets or sets the access token.
/// </summary>
/// <value>The access token.</value>
public string AccessToken { get; set; }
public string AccessToken { internal get; set; }

/// <summary>
/// Gets or sets the access token secret.
/// </summary>
/// <value>The access token secret.</value>
public string AccessTokenSecret { get; set; }
public string AccessTokenSecret { internal get; set; }

/// <summary>
/// Gets or sets the consumer key.
/// </summary>
/// <value>The consumer key.</value>
public string ConsumerKey { get; set; }
public string ConsumerKey { internal get; set; }

/// <summary>
/// Gets or sets the consumer secret.
/// </summary>
/// <value>The consumer secret.</value>
public string ConsumerSecret { get; set; }
public string ConsumerSecret { internal get; set; }
}
}
Oops, something went wrong.

0 comments on commit ce952f8

Please sign in to comment.
You can’t perform that action at this time.