宝玉

专注于web开发技术
随笔 - 114, 评论 - 5920 , 引用 - 594

关于CnForums版权不得不说的事

因为一直以来主要精力都在开发程序,CnForums直到Beta1版发布的时候,还没有加入自己的LICENSE。
众所周知,CnForums是在Community Server :: Forums (原asp.net forums论坛)基础上进行本地化而成,遵守其协议,保留了其eula.gif和链接,而且CnForums也是继续开源的。

对于CnForums,我们(PSP团队)是花了很多精力和时间的,并且CnForums也得到了大家的认可,目前很多网站都开始采用CnForums。而有些个人/团队却不尊重我们的劳动,无视CnForums的版权,直接在源码/界面上稍加改进,不但没有保留CnForums相关链接,也没有任何申明和相关说明。

出现这种情况也是我们意料之中的事情,现在对我们来说,最重要的还是继续完善改进CnForums的程序,将这些无耻的盗版者远远甩在身后!同时也希望得到大家的支持!

目前正在致力于CnForums Beta2的开发,估计不久后就会发布,针对用户的反馈修正了很多BUG,新增了一些比较实用的功能。同时支持dvbbs等论坛的导入。

BTW: CS1.0 BETA跳票了,而且Beta不开源了。据说要等到Release版才开源。期待……

发表于 2004年11月17日 5:08

评论

# re: 关于CnForums版权不得不说的事

不管他有没有盗版,也希望你们CnForums Beta2做的更好
2004/11/17 23:38 | 深蓝

# re: 关于CnForums版权不得不说的事

我会在底部保留cnforums的链接和说明
2004/11/18 7:47 | 笨小孩

# re: 关于CnForums版权不得不说的事

支持宝玉!
2004/11/19 0:42 | lee

# re: 关于CnForums版权不得不说的事

在这个问题上, 要看长远, 一个例子时DNN, 公开鼓励“盗版”, 也不要求加license/copyright。 结果,一年多一点的时间, DNN现在造成的轰动在开源里也是少见的, 看看多少人为3.0跳票骂娘。

DNN的一个最大特点就是不断的改进,增加功能,一直走在“盗版”的前面, 一段时间后, 就确立了地位, “盗版”也就没力气一路跟下去了。DNN的功能以经直追Sharepoint, 且简易许多, 甚至ASP2.0的有些特点都有DNN的痕迹。

CN,CommunityServer在这点上比DNN差很远, 更新太慢, 大概那帮人太喜欢到处开讨论会seminar宣传tips,不花时间坐下来写code。
2004/11/19 3:04 | 顾非

# re: 关于CnForums版权不得不说的事

谢谢站长所做的一切,从你的blog上收益非浅,你帮助了一大堆人。我希望我们中国的软件不要落后于美国,印度,但是差距还是很大的,不断的进步和交流,才能慢慢缩小差距。
2004/11/19 3:40 | apple

# re: 关于CnForums版权不得不说的事

利用WebService集成DNN和cnforums是个好主意,基本上是将论坛的登陆,登出,增删改用户用WebService包装,在DNN的相应操作后调用这些Webservice。国外有一些代码如下,希望国人加以改进验证(http://www.communityserver.org/ShowPost.aspx?PostID=460456):
We were able to able to integrate one of our sites login (with have about 3 different entry points) with the forums login. It pretty easy to setup and nothing really needs to be done to either site cookies. The primary forums site code does not need to be touched except for one setting in web.config (allow ws gets) and also a new webservice file. Also both apps cookies are seperate and not dependant on each other. So I think this should should also scale across for any other application as well. Couple quick notes before I post the code:

-we wrote this web service logic today and a lot of it we just created webservice versions of some of the existing procedures (good job guys, we left your comments in too and threw in additional logic to try to see if it would work. with that said I'm sure we'll add additional methods and re-write how some of this works - the next step is cleanup and tweaks. Ultimately we are waiting for the aspnetforums integration but this will help while in waiting...

-this is one way login from our site login to the forums, I believe we'll just need to write a web service control to access our main site logins from the forums app in similiar fashion (or in your case DNN). in theory it should extremely similiar.

-we have a local crypto library that we use to encrypt some of the data before sending/receiving etc so I'll remove that for simplicity sakes. some other security checks are removed as well so I hope the logic still works and I didn't miss anything - I apologize if I did.

ok, here's what we did:

1. created a new web service (asmx page) in the aspnetforums project (ie: root) called ws_utilities.asmx (code below), copied the code below and recompiled the aspnetforums project. users can login, create new account, add roles, remove roles etc via web service...

2. in one of our main site logins after site successful login we access the ws_utilities.asmx using System.Net.HttpWebRequest (may change later)

3. web.config allow HTTP GET setting (AspNetForums web.config - use get for now, will probably change later)


1. ws_utilities.asmx code-behind:


using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using aspnetforums;
using aspnetforums.Components;
using aspnetforums.Enumerations;
using System.Web.Security;

namespace aspnetforums

{

/// <summary>
/// Summary description for WS_Utilities.
/// </summary>
[WebService(Namespace="http://www.mysite.org/webservices/")]

public class WS_Utilities : System.Web.Services.WebService
{

AccountActivation activation = Globals.GetSiteSettings().AccountActivation;
string output = "";

public WS_Utilities()
{
//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();
}

#region Component Designer generated code
//Required by the Web Services Designer
private IContainer components = null;


/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>

private void InitializeComponent()
{
}

/// <summary>
/// Clean up any resources being used.
/// </summary>

protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion

[WebMethod]
public string CreateAccount(string username, string password, string emailAddress) {

CreateUserStatus status = CreateUserStatus.UnknownFailure;

// try to create the new user account
User user = new User();
user.Username = username;
user.Email = emailAddress;

// What account activation mode are we in?

switch (activation)
{
case (AccountActivation.AdminApproval):
user.Password = String.Empty;
break;
case (AccountActivation.Email):
user.Password = String.Empty;
break;
case (AccountActivation.Automatic):
user.Password = password.Trim();
break;
default:
user.Password = String.Empty;
break;
}

// Does the user require approval?
if (activation == AccountActivation.AdminApproval)
user.AccountStatus = UserAccountStatus.ApprovalPending;
else
user.AccountStatus = UserAccountStatus.Approved;


// Set the Anonymous flag to false
user.IsAnonymous = false;

// Attempt to create the user
if (user.Username == "Anonymous")
{
status = CreateUserStatus.DuplicateUsername;
}
else
{

// EAD TODO 6/26/2004: We need to move this to the Admin panel to
//make the admin
// decide to send an email or not.
// For now, we're changing to "true" send email to everyone for any
// reason. Including new users with auto-activation. This logic is
// handled in the Users.Create() method.

status = Users.Create(user, true);
}

// Determine if the account was created successfully
switch (status)
{

// Username already exists!
case CreateUserStatus.DuplicateUsername:
output = aspnetforums.Components.ResourceManager.GetString("CreateNewAccount_CreateUserStatus_DuplicateUsername");
break;

// Email already exists!
case CreateUserStatus.DuplicateEmailAddress:
output = aspnetforums.Components.ResourceManager.GetString("CreateNewAccount_CreateUserStatus_DuplicateEmailAddress");
break;

// Unknown failure has occurred!
case CreateUserStatus.UnknownFailure:
output = aspnetforums.Components.ResourceManager.GetString("CreateNewAccount_CreateUserStatus_UnknownFailure");
break;

// Username is disallowed
case CreateUserStatus.DisallowedUsername:
output = aspnetforums.Components.ResourceManager.GetString("CreateNewAccount_CreateUserStatus_DisallowedUsername");
break;

// Everything went off fine, good
case CreateUserStatus.Created:
output = aspnetforums.Components.ResourceManager.GetString("CreateNewAccount_CreateUserStatus_Created");
break;
}

//return result
return output;
}

[WebMethod]
public string AddUserToRole(string userID, string roleID)
{

try
{
ForumsDataProvider dp = ForumsDataProvider.Instance();
dp.AddUserToRole(Convert.ToInt32(userID), Convert.ToInt32(roleID));
output = "success";
}
catch
{
output = "failed";
}

//return result
return output;

}

[WebMethod]
public string RemoveUserFromRole(string userID, string roleID)
{

try
{
ForumsDataProvider dp = ForumsDataProvider.Instance();
dp.RemoveUserFromRole(Convert.ToInt32(userID), Convert.ToInt32(roleID));
output = "success";
}
catch
{
output = "failed";
}

//return result
return output;
}

[WebMethod]
public string LoginUser(string username, string password, string persist)
{

try
{

User userToLogin = new User();
userToLogin.Username = username;
userToLogin.Password = password;
LoginUserStatus loginStatus = Users.ValidUser(userToLogin);

if( loginStatus == LoginUserStatus.Success )
{
//set message
output = "success";

// Are we allowing login?
// TODO -- this could be better optimized

if (!Globals.GetSiteSettings().AllowLogin)
{
bool allowed = false;
int userid = Users.FindUserByUsername( userToLogin.Username ).UserID;
ArrayList roles = Roles.GetRoles(userid);

foreach (Role role in roles)
{

if (role.Name == "Site Administrators" || role.Name == "Global Administrators")
{
allowed = true;
break;
}

}

// Check the user is in the administrator role
if (!allowed)
{
ForumException error = new ForumException(ForumExceptionType.UserLoginDisabled);
output = error.Message;
}
}


FormsAuthentication.SetAuthCookie(userToLogin.Username, Convert.ToBoolean(persist));
HttpCookie c = FormsAuthentication.GetAuthCookie(userToLogin.Username, Convert.ToBoolean(persist));
//modify any cookies settings as needed
HttpContext.Current.Response.AppendCookie(c);
}

else if(loginStatus == LoginUserStatus.InvalidCredentials)
{ // Invalid Credentials
ForumException error = new ForumException(ForumExceptionType.UserInvalidCredentials, userToLogin.Username);
output = error.Message;
}

else if(loginStatus == LoginUserStatus.AccountPending)
{ // Account not approved yet
ForumException error = new ForumException(ForumExceptionType.UserAccountPending);
output = error.Message;
}

else if(loginStatus == LoginUserStatus.AccountBanned)
{ // Account banned
ForumException error = new ForumException(ForumExceptionType.UserAccountBanned, userToLogin.Username);
output = error.Message;
}

else if(loginStatus == LoginUserStatus.AccountDisapproved)
{ // Account disapproved
ForumException error = new ForumException(ForumExceptionType.UserAccountDisapproved, userToLogin.Username);
output = error.Message;
}

else if(loginStatus == LoginUserStatus.UnknownError)
{ // Unknown error because of miss-syncronization of internal data
ForumException error = new ForumException(ForumExceptionType.UserUnknownLoginError);
output = error.Message;
}

}
else
output = "invalid security token";
}

catch(Exception ex)
{
output = ex.Message);
}


//return result
return output;
}

[WebMethod]
public string LogoutUser(string ws_key)
{
try
{
// log the user out
FormsAuthentication.SignOut();


// Nuke the roles cookie
Roles.SignOut();

//set message
output = "success";
}
catch
{
output = "failed";
}


//return result
return output;

}
}
}


2. main site login form code-behind, onSubmit event (removed unimportant logic and this ddefinately should be re-written but it was a quick first draft) - variation of below would go into DNN login onClick_Submit (or whatever it's called)...


public void Login_Click(Object sender, System.EventArgs e)
{

//bla blah blah user has been authenticated through main site
//
//go to next phase and check aspnetforums
//
//bla blah blah
//this logic can be written better, it was a quick test to see if it worked or not

//output container
string targetOutput = "";

//create target link
String targetURL = "http://www.mysite.org/forums/ws_utilities.asmx/LoginUser?username=" + userID.Text + "&password=" + password.Text + "&persist=true");//or persist=false if remember checkbox

//create request object, settings...
System.Net.HttpWebRequest objRequest = (HttpWebRequest) System.Net.HttpWebRequest.Create(targetURL);
objRequest.ContentType = "application/x-www-form-urlencoded";

//create cookie container to hold response cookies
CookieContainer myContainer = new CookieContainer();
objRequest.CookieContainer = myContainer;

//get response and read stream
HttpWebResponse objResponse = (HttpWebResponse) objRequest.GetResponse();
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()) )
{
targetOutput = sr.ReadToEnd();
sr.Close();
}

//need some type of check to return if aspnetforums login failure - quick hack check probably should have response returned as xml
if(targetOutput.IndexOf("success",0) > -1){

//get response cookies
objResponse.Cookies = objRequest.CookieContainer.GetCookies(objRequest.RequestUri);

//iterate all response cookie and store local copies
// this will store aspnetforums auth cookies
foreach (Cookie cook in objResponse.Cookies)
{
HttpCookie cookie = new HttpCookie(cook.Name);
cookie.Name = cook.Name;
cookie.Value = cook.Value;
HttpContext.Current.Response.AppendCookie(cookie);
}

//get redirect url
string returnUrl = (Request.QueryString["ReturnUrl"]);

//redirect
if(returnUrl!=null)
Response.Redirect(globalFunctions.releaseSSLRef(returnUrl), false);

}
else{
//login failed on aspnetforums, let user know

}

}

3. web.config allow HTTP GET setting

add in <system.web>, using HTTP GET for now, can use whatever method prefered later

<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
<add name="HttpPostLocalhost"/>
</protocols>
</webServices>

==============
just tested this in DNN and it does works. username and password info should map out one-to-one in DNN and DotNetForums to work correctly (using only logic below unless you access CreateAccount ws in DNN registration). it's late and I haven't accessed the CreateAccount and any role ws methods from DNN yet but they work in another app. here's the DNN route I'll probably take next...

-use the DNN registration and hit the webservice CreateUser method from DNN similiar to LoginUser access below
-in forums point registrations to DNN registration (SiteUrls.config - haven't tested), so user cannot register through forums
-in forums point logins to DNN login (SiteUrls.config - haven't tested)
-special access and roles would still be accessed from forums admin but could be added through ws as well

that should be it in a nutshell... nothing too crazy...

below is the DNN logic (replace #2 from orig post with this) I placed in /admin/security/signin.ascx.vb file in the cmdLogin_Click event right before any of the redirects - I'll post the register logic when I get it done as well but gotta grabs some sleep now it's after 2 EST. you may also want to hike up security a little but this more or less shows one easy alternative integrating without ripping out a lot of code...

'create output string
Dim targetOutput As String = ""


'create ws info
Dim postData as String = "?username=" & txtUsername.Text & "&password=" & txtPassword.Text & "&persist=true"

//replace target with your url
Dim targetURL as String =
"http://192.168.1.101/forums/ws_utilities.asmx/LoginUser"">http://192.168.1.101/forums/ws_utilities.asmx/LoginUser" & postData

'set request object and contenttype
Dim objRequest As HttpWebRequest = CType(objRequest.Create(targetURL), HttpWebRequest)
objRequest.ContentType = "application/x-www-form-urlencoded"

'set cookie container
Dim myContainer As New CookieContainer()
objRequest.CookieContainer = myContainer

'get output and stream
Dim objResponse As HttpWebResponse = CType(objRequest.GetResponse(), HttpWebResponse)
Dim sr As New StreamReader(objResponse.GetResponseStream())
targetOutput = sr.ReadToEnd()
sr.Close()


'iterate response cookie and store locally
objResponse.Cookies = objRequest.CookieContainer.GetCookies(objRequest.RequestUri)
Dim cook As Cookie
For Each cook In objResponse.Cookies
Dim cookie As New HttpCookie(cook.Name)
cookie.Name = cook.Name
cookie.Value = cook.Value
HttpContext.Current.Response.AppendCookie(cookie)
Next cook

======================
loubrou - that definately can be added as needed in the DNN logic (see below). On the ws end, a aspnetforums response string is returned, ie: "invalid login", "success", etc. A check could easily be added to DNN if the forums login went wrong - a Select/Case or If/Then on the returned string would be easy enough. I wanted to keep the concept as basic as possible for these posts and provide the least amount of working logic - we're also using encryption logic that I removed as well... if the accounts are one-to-one in DNN and aspnetforums the login should fail first on the DNN side and not even make it to the aspnetforums ws call. In order to get the accounts one-to-one, this could be done easily by iterating through existing DNN accounts and calling CreateAccount ws method (see next post).

'create output string
Dim targetOutput As String = ""


'create ws info
Dim postData as String = "?username=" & txtUsername.Text & "&password=" & txtPassword.Text & "&persist=true"

//replace target with your url
Dim targetURL as String =
"http://192.168.1.101/forums/ws_utilities.asmx/LoginUser"">http://192.168.1.101/forums/ws_utilities.asmx/LoginUser" & postData

'try forums login
Try

'set request object and contenttype
Dim objRequest As HttpWebRequest = CType(objRequest.Create(targetURL), HttpWebRequest)
objRequest.ContentType = "application/x-www-form-urlencoded"

'set cookie container
Dim myContainer As New CookieContainer()
objRequest.CookieContainer = myContainer

'get output and stream
Dim objResponse As HttpWebResponse = CType(objRequest.GetResponse(), HttpWebResponse)
Dim sr As New StreamReader(objResponse.GetResponseStream())
targetOutput = sr.ReadToEnd()
sr.Close()


'iterate response cookie and store locally
objResponse.Cookies = objRequest.CookieContainer.GetCookies(objRequest.RequestUri)
Dim cook As Cookie
For Each cook In objResponse.Cookies
Dim cookie As New HttpCookie(cook.Name)
cookie.Name = cook.Name
cookie.Value = cook.Value
HttpContext.Current.Response.AppendCookie(cookie)
Next cook

Catch exc As Exception 'catch error, report to DNN
ProcessModuleLoadException(Me, exc)
End Try

'display output test - uncomment to display ws response string
'HttpContext.Current.Response.Write("output response: " & HttpContext.Current.Server.HtmlEncode(targetOutput))
'HttpContext.Current.Response.End()



======================
here's the forums account creation logic located in /admin/users/Register.ascx.vb

since this is a variation of the aspnetforums logic, the ws output will return "success", "failure", "account exists", "email address in use", etc messages (these are not exact messages, I don't recall exact wording off the top of my head). upon creation of account forums email is also sent to user.

make sure you reference the following libraries:

Imports System.Net
Imports System.Text
Imports System.IO

and then after DNN has created account in RegisterBtn_Click event:

'DNN add account logic
Dim UserId As Integer = objUser.AddUser(PortalId, txtFirstName.Text, txtLastName.Text, Address1.Unit, Address1.Street, Address1.City, Address1.Region, Address1.Postal, Address1.Country, Address1.Telephone, txtEmail.Text, txtUsername.Text, objSecurity.Encrypt(Convert.ToString(_portalSettings.HostSettings("EncryptionKey")), txtPassword.Text), Convert.ToBoolean(IIf(_portalSettings.UserRegistration = 1, False, True)), AffiliateId)

'DNN check if account created
If UserId >= 0 Then


'START CREATE ACCT HERE

'create output string
Dim targetOutput As String = ""


'create ws post info
Dim postData as String = "?username=" & txtUsername.Text & "&password=" & txtPassword.Text & "&emailAddress=" & txtEmail.Text

'create target url - change to your url or domain
Dim targetURL as String = "http://192.168.1.101/forums/ws_utilities.asmx/CreateAccount" & postData

'try to create account
Try

'set request object and contenttype
Dim objRequest As HttpWebRequest = CType(objRequest.Create(targetURL), HttpWebRequest)
objRequest.ContentType = "application/x-www-form-urlencoded"

'set cookie container
Dim myContainer As New CookieContainer()
objRequest.CookieContainer = myContainer

'get output and stream
Dim objResponse As HttpWebResponse = CType(objRequest.GetResponse(), HttpWebResponse)
Dim sr As New StreamReader(objResponse.GetResponseStream())
targetOutput = sr.ReadToEnd()
sr.Close()


'iterate response cookie and store locally - for CreateAccount I don't believe this is needed since auth cookie not written
objResponse.Cookies = objRequest.CookieContainer.GetCookies(objRequest.RequestUri)
Dim cook As Cookie
For Each cook In objResponse.Cookies
Dim cookie As New HttpCookie(cook.Name)
cookie.Name = cook.Name
cookie.Value = cook.Value
HttpContext.Current.Response.AppendCookie(cookie)
Next cook

Catch exc As Exception 'catch error report to DNN
ProcessModuleLoadException(Me, exc)
End Try

'display output test - uncomment to display ws response string
'HttpContext.Current.Response.Write("output response: " & HttpContext.Current.Server.HtmlEncode(targetOutput))
'HttpContext.Current.Response.End()

'END CREATE ACCT HERE
==================
and logoff located in /admin/security/logoff.aspx.vb before DNN redirect in Page_load event...



'create output string
Dim targetOutput As String = ""

'create target url - change to your url or domain
Dim targetURL as String = "http://192.168.1.101/forums/ws_utilities.asmx/LogoutUser"

'try to logout
Try

'set request object and contenttype
Dim objRequest As HttpWebRequest = CType(objRequest.Create(targetURL), HttpWebRequest)
objRequest.ContentType = "application/x-www-form-urlencoded"

'set cookie container
Dim myContainer As New CookieContainer()
objRequest.CookieContainer = myContainer

'get output and stream
Dim objResponse As HttpWebResponse = CType(objRequest.GetResponse(), HttpWebResponse)
Dim sr As New StreamReader(objResponse.GetResponseStream())
targetOutput = sr.ReadToEnd()
sr.Close()

Catch exc As Exception 'catch error report to DNN
ProcessModuleLoadException(Me, exc)
End Try

'display output test - uncomment to display ws response string
'HttpContext.Current.Response.Write("output response: " & HttpContext.Current.Server.HtmlEncode(targetOutput))
'HttpContext.Current.Response.End()



2004/11/19 7:34 | qtbgo

# re:关于CnForums版权不得不说的事

^_~,pretty good!
2005/4/19 20:43 | 恒温恒湿箱

# re:关于CnForums版权不得不说的事

^_~,pretty good!csharpsseeoo
2005/5/16 15:41 | 工业pH计

# re:关于CnForums版权不得不说的事

关于CnForums版权不得不说的事ooeess
2005/6/14 18:42 | 测汞

# re:关于CnForums版权不得不说的事

关于CnForums版权不得不说的事ooeess
2005/7/15 23:19 | 红外热像仪

# 100080


<a href="http://www.lihongyu.com.cn">李洪宇</a>
<a href="http://www.lihongyu.com.cn">山河林业局李洪宇</a>
2008/8/5 2:31 | beijing tour

# moncler jackets

The actual retailing http://www.tiffanysuksale.com value across the anklet bracelets together with the necklaces alters really,http://www.canadapandorabracelet.com as well as being depending the entire remarkable package in your sorts of elements this band and also charm will be made of.an important materials used are Silver,http://www.pandorabraceletuk.org Oxidised Silver or 14ct Rare metal. Ovoids are made of silver; Murano vino magnifying glaas pills, or maybe a mix of Silver with the help of antique watches. http://www.tiffanysjewelrysale.com Various drops include effective crystals.which ever traditional, theres a idea proper for everybody's pocketCagain
2011/9/1 6:33 | moncler jackets sale

# canada

These articles written too great,they rich contents ma le scarpe non ti donano. meglio dei sandali con stringe più sottili e caviglia libera Perfect! and data accurately.they are help to me.I expect to see your new share.
2011/9/1 22:17 | Montebello Parka

# canada goose jackets

This is a great blog posting and nice.
2011/9/25 22:56 | canada goose jackets

# re: 关于CnForums版权不得不说的事

It is full of creative and innovative ideas that i am always searching on internet.Really i am glad to read this article and your creativity has inspired me to write my own articles
2011/9/25 23:51 | promotional items

# louis vuitton outlet

很高兴地看到你的博客分享有价值的信
2011/10/14 21:43 | louis vuitton outlet

# re: 关于CnForums版权不得不说的事

http://www.shop-louisvuitton.org
2011/10/22 3:41 | Louis Vuitton Outlet

# I greatly liked your post but I'm still not sure if I agree with you. I think you write not bad and you convey your ideas in a good form but I'm still not sure whether we're on the same boat. Anyways,keep up the good writing. Thanks.

I greatly liked your post but I'm still not sure if I agree with you. I think you write not bad and you convey your ideas in a good form but I'm still not sure whether we're on the same boat. Anyways,keep up the good writing. Thanks.
2011/10/27 20:04 | Moncler Outlet

# I think the author's writing is very good, although the point of view a little bit different, but really is a good article, and the author can hope to have time to discuss some problems.

I think the author's writing is very good, although the point of view a little bit different, but really is a good article, and the author can hope to have time to discuss some problems.
2011/10/27 20:05 | Moncler Jackets

# In this article, I think it's very good, can see how the author is love, hope can the writing this spirit to keep going!!!!!

In this article, I think it's very good, can see how the author is love, hope can the writing this spirit to keep going!!!!!
2011/10/27 20:05 | Juicy Couture Outlet Online

# Jordan Max

The supreme happiness of life is the conviction that we are loved. 
There is only one success --- to be able to spend your life in your own way.
Work is the grand cure of all the maladies and miseries that ever beset mankind.
2011/10/27 21:03 | Jordan Max

# uggs clearance

High quality and inexpensive you deserve
2011/10/27 22:12 | uggs clearance

# Belstaff Outlet

Really your post is really very good and I appreciate it. It’s hard to sort the good from the bad sometimes, but I think you’ve nailed it. You write very well which is amazing. I really impressed by your post.
2011/10/31 19:38 | Belstaff Outlet

# Canada Goose Jackets

Canada Goose,the one of international famous brand combine classical with fashion are popular all over the world.We supply you with all kinds <a href=http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada Goose Jackets</a>,including Canada Goose Jackets,Canada Goose Parkas Jacket and Canada Goose Expedition Parka.Canada Goose Jackets are stylish and cozy with fashionable design and splendiferous quality.<a href=http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada Goose</a> not only could offer you the basic need,but also take the elements of personalitiy and diversification into consideration to make the cloth just for your personal need.So the Canada Goose Jackets will be your good choice if you are looking for a fashion and suitable vest.<a href=http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada">http://www.salecanadagooses.com/>Canada Goose Sale</a> Outlet with more items,and they are original package and quality with free shipping!Choose you favourite in our store,you will enjoy the prefect quality of the Canada Goose Sale in our online stoer,they will never let you down!
2011/12/8 22:21 | Canada Goose Jackets

# Office 2010

Thanks for your post, I like this post very much.
I will keep your new article. I really enjoyed reading this post, thanks for sharing.
2011/12/14 22:44 | Office 2010

# Office 2007

This article is GREAT it can be EXCELLENT JOB and what a great tool!
2011/12/17 1:36 | Office 2007

# Air Griffey Max 1

Good article! Thank you so much for sharing this post.Your views truly open my mind.
2011/12/19 21:01 | Air Griffey Max 1

# Office 2007

I will keep your new article. I really enjoyed reading this post, thanks for sharing.
2011/12/28 21:54 | Office 2007

# coach outlet online

The most incredible knack about the coach bag of coach outlet online is that it would excellently please your minds beyond your mind's eye. For example, if you want to become the Angelina Julie, you will immediately need to wear the coach handbag around your shoulder.On establishing contact with a coach outlet hire agency, a few clarifications would need to be put to rest prior to working out a deal.
2012/1/5 22:53 | coach outlet online

# louis vuitton uk

As we know,
louis vuitton uk

as we can imagine are a little expensive but are of good quality like the brand Coach. It's really a good choice to shopping in Louis Vuitton outlet.
louis vuitton

Outlets offer famous classic brand for LV,Channel, with perfect service.So become to the VIP soon.They offer more new styles,like LV purses,LV wallets etc. And are tested by product quality monitoring center .
http://www.louisvuitton-ukoutlet.org.uk
2012/1/6 0:46 | louis vuitton uk

# louis vuitton sale

There must be one louis vuitton vernis that is sure to fit your style. louis vuitton sale provide Louis Vuitton belt for men has royal purple lining, which could burnish whatever clothes.As we show below, louis vuitton outlet have a number of Louis Vuitton Earrings, louis vuitton replica handbags, in different styles for your selection.
http://www.louisvuittonoutletsaletime.com
2012/1/6 0:49 | louis vuitton sale

# coach factory outlet

Welcome to the coach factory outlet store and Enjoy Shopping Here! We promise all the customers to have the superior qualities and low prices.Many people like to go to coach factory online, Some people like to designers and shiny metal or leather coach shoulder bags. However, the majority of women choose to safe the neuter color coach shoulder bags. http://www.coachfactoryoutletlove.com
2012/1/6 0:49 | coach factory outlet

# coach outlet online

At the
coach outlet online

you have the largest selection of the day. If you touch the item and like it, keep it in your possession until you make your final decision.In particular, products from
coach factory outlet

with leather design are fashionable, handmade,leading the wave of American pop.It with simple,durable and unique style to win consumers.
http://www.coachoutletonlineusacoach.com
2012/1/6 2:07 | coach outlet online

# louis vuitton outlet

In the web times, even if you are a noble person on
louis vuitton outlet

, or to real action to prove himself, has been integrated into a new era.If in a foreign country to join the twitter, it is best to join army of micro-Bo;They're not chosen, so one of these ideal for you.For more flexibleness a lot more like these, there are lots of discount 'shoulder' variations outlet
louis vuitton bags

.
http://www.louisvuittonoutletbagsu.com
2012/1/6 2:07 | louis vuitton outlet

# coach outlet store

Coach Outlet Store vision system is a visual enjoy, is a visual art. The particular design has been integrated function and the element of elegancy, then show you an exquisite and excellent product. You need not worry about the quality of the coach outlet store online for sale now. The Coach brand is famous for the perfect products.

2012/1/6 2:11 | coach outlet store

# coach outlet

if your dream is to look like a million bucks for a mere several dollars, then our coach outlet store is the Jiminy Cricket of your existence. to obtain coach outlet online in Hainan is amongst the brand new darling from residential holiday makers.


2012/1/6 2:11 | coach outlet

# Office 2010

感谢分享!
2012/1/14 21:33 | Office 2010

# http://www.winter-boots.biz/

GH-The <a href="http://www.winter-boots.biz//"><strong>ugg boots</strong></a> As the winter comes, you’ll understand how <a href="http://www.barbourquilted.com/"><strong>barbour jacket</strong></a> is vital and perhaps you opt to shop .
2012/2/6 21:59 | barbour utility jacket

# http://www.uggbootssales-au.net/

GH-Nice classic short boots with the able adroitness. These ugg boots sale are able-bodied fabricated with the artistic design. With the heel bouncer apparent with http://www.snowboots-uk.org/ , these ugg boots do attending actual timeless.
2012/2/6 21:59 | cheap ugg boots

# Thank you for sharing, very useful, will continue to focus on your article!

Thank you for sharing, very useful, will continue to focus on your article!
2012/2/9 2:30 | Juicy Couture Outlet Online

# A very worthy article, the article highlights many of the commendable!

A very worthy article, the article highlights many of the commendable!
2012/2/9 2:30 | Juicy Couture Outlet

# Like your article, have been attention you, to write this article or very good, very good, support you!

Like your article, have been attention you, to write this article or very good, very good, support you!
2012/2/9 2:30 | Coach Outlet

# tory burch outlet

there tory burch outlet can show your beautiful legs perfectly and make you feel more confident among your friends.
2012/2/14 21:43 | tory burch outlet

# It’s good to see this information in your post, I was looking the same but there was not any proper resource, thanks now I have the link which I was looking for my research.

It’s good to see this information in your post, I was looking the same but there was not any proper resource, thanks now I have the link which I was looking for my research.
2012/3/15 4:06 | oakley sunglasses

# I worship the spirit of creation, worship, worship, worship of force blood heart, I worship, worship, worship sorrow bomb damage, one of the greatest, popular person get everything. Wealth lose heart, wealth is lost. Therefore we should node popularity.

I worship the spirit of creation, worship, worship, worship of force blood heart, I worship, worship, worship sorrow bomb damage, one of the greatest, popular person get everything. Wealth lose heart, wealth is lost. Therefore we should node popularity.

# authentic christian louboutin

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me.
2012/3/30 20:38 | authentic christian louboutin

# louis vuitton uk

http://www.louisvuittonukk.co.uk louis vuitton uk
louis vuitton uk are ideal for daily usage. With the beautifully crafted exterior and with loads of interior space for all the essentials, it will adorn any outfit with city elegance. Louis Vuitton Bags are completely handmade, using the special materials of LV and first-class discoloration leather which are very fine and smooth,choose it on this louis vuitton online shop please. Best Place To Buy Louis Vuitton Online. "Be master of your petty annoyances and conserve your energies for the big worthwhile things.
2012/5/8 21:43 | louis vuitton uk

# louis vuitton outlet

http://www.louisvuittonoutletbagse.net louis vuitton outlet
Here is a world of louis vuitton outlet where you can find all kinds of new style and fashion Louis Vuitton bags. We really want to lead the trend and let our customer in the pursuit of luxury and fashion, satisfied the needs of customers. Now that louis vuitton bags outlet Belt you know what to consider, go and make an informed decision.Have a look at idol white. Do not feel like you are the only individual who may be surprised at all there is to discover about Baby pushchairs. These are powerful points, to be sure, and you can realize excellent results as well. But there is a great deal more than that about this. You can take specific points and pieces of important information and really feel something most people never do. That is what is can be achievable when you continue to discover more. Use Stunning Political Strategy Signs To Draw In Voters Almost all the politicians are specialized in. Welcome to our noteworthy Louis Vuitton handbags outlet Online Shop!
2012/5/8 21:43 | louis vuitton outlet

# coach outlet store online

http://www.coachoutletstoreonlineso.com coach outlet store online
Wholesale coach outlet are even provided for VIP members. Haven't got your own Coach yet? Why not come to coach outlet store online outlet. the shirt of coach outlet store has the abbreviation'FHS', which implies that the school at which he coached has a name that starts with an 'F'. If you buy Coach items at the Coach Outlet Online store, the goods will be sent out within 24 hours after confirming your payment and arrive to your door within 7 work days.
2012/5/8 21:43 | coach outlet store online

# coach bags

http://www.coachbagsoutlete.com coach bags
You might have seen plenty of greatest quality bags into your entire life span but when it comes to the Coach Bags they are remarkably efficient, versatile and carved bags beyond your imaginations. The Coach Signature Hobo is from the latest release of coach outlet store online. Its crisp, scribble material, leather handle, perfectly complements the relaxed shape of this stylish pouch. Coach bags, purses and other accessories can definitely add a touch of class to every woman. Coach Outlet Store sells Coach products which are moderately priced and yet of good quality.
2012/5/8 21:44 | coach bags

# coach factory outlet

Once visit, you will be unable to restrain loving it. Warmly welcome all of you to the Summer Sales Promotion on coach factory outlet.If you want to have the latest Coach arrivals, coach factory online may be a good choice. It provides its members with actually beneficial?prices?and high quality services.You can discover all types of style and design bags on coach factory outlet online, including the hot selling coach purses and coach wallets.
http://www.coachfactoryoutletao.com
2012/5/8 22:00 | coach factory outlet

# louis vuitton sale

There must be one louis vuitton vernis that is sure to fit your style. louis vuitton sale provide Louis Vuitton belt for men has royal purple lining, which could burnish whatever clothes.Looking for a louis vuitton outlet and don't know where they are? The easiest way is to enter here. That simple and you definitely will never be disappointed.
http://www.louisvuittonoutletsaleo.net

2012/5/8 22:00 | louis vuitton sale

# coach outlet online

It's wonderful to find out it does not slip in your signature at the bottom of the case and the appearance of brass accents from coach outlet online, Because women who can look stylish this summer.I received the Coach purse I ordered at the coach outlet store yesterday.I like its fashionable style as well as fine workmanship very much.Attention! coach outlet is offering new products at favorable prices for August.
http://www.coachoutletonlineao.com
2012/5/8 22:00 | coach outlet online

# coach outlet

coach outlet has always been simple,durable style features to win consumers.The products are more flexible,with easy bleaching,wear characteristics,and simply use a damp cloth.coach outlet store online marketed properly all greater compared to earth and earn cozy praise from customers. They are made from the finest leather and fabric.As a perfect combination of classic and modern fashion, coach outlet online can show the customers'unique personality.
http://www.coachoutletin.org
2012/5/8 22:00 | coach outlet

# louis vuitton uk

Louis Vuitton Outlet offers not only the fashion louis vuitton uk, but also many other LV goods. Welcome to visit the LV online store.louis vuitton Store Online Handbags can also bring great accuracy as well as practical applicability and fashionable.LV bags in the louis vuitton outlet are a feminine update on an urban classic. With plenty of room for all of your essentials this covetable carryall will take you through the weekend in style.
http://www.louisvuittonoutletukc.co.uk
2012/5/14 20:53 | louis vuitton uk

# coach outlet online

Becoming a regular member of coach outlet online, you can even buy wholesale purses, handbags, leather wallets at preferential prices. Why not have a try?coach factory outlet can design new and original products that are also functional. The stylish appearance of products, sophisticated workmanship, superior quality and highly competitive prices have won the customer's trust and love from consumers at home and abroad. So you can rest assured that purchase.Attention! coach outlet is offering new products at favorable prices for August. Brighter colors, finer looks and newer designs, all bring you a whole new summer.
2012/5/14 22:06 | coach outlet online

# [coach outlet]的事

coach outlet can provide the coach exactly the same is expected in a retail store. It can help you find bags of various colors, shapes and designs, which prove once again that the coach is actually a selection for the housekeeper.coach outlet store online with fashion style and top quality succeed. In any occasions they are very suitable and appropriate for its precise and rich design.Coach Kristin Leather Tote in coach outlet online is feature with top leather which is durable. Classic color is easy to match any clothes and different with other Coach bags. The bag with a large inside pocket and two outside pockets which are very convenient, you can take this bag in any occasions.
http://www.coachoutletao.com
2012/5/14 22:49 | [coach outlet]

# coach factory outlet

If you do not know design can be the most fashionable this fall, consider a glance on coach factory outlet! This summer, you have a wide range of options, because there are numerous designs, you can find from.coach factory online is actually a stylish Coach online store to sell perfect quality and discount Coach handbags, Coach bags, Coach wallets and Cheap Coach Purse.If you love Coach,you will like to get the best price on it.There are some practical and beautiful items for sale at coach factory outlet online for your selection. Do not miss it and have one for a try.
http://www.coachfactoryoutletonlineso.com
2012/5/15 0:41 | coach factory outlet

Post Comment

主题  
姓名  
主页
校验码  
内容   
京ICP备 05050892号