📄 skinutils.java
字号:
Cookie cookie = getCookie(request,name);
if(cookie != null) {
return cookie.getValue();
}
return null;
}
/**
* Formats the unfiltered body of a message to make it appear in the "quote
* original" format. This is simply the body of the message with the
* delimiter appended to the beginning of each line. The delimiter
* is most often "> " by convention. A desired length for each line in the
* returned String can be specified to aid in formatting.<p>
*
* This method uses message.getUnfilteredBody() in order to get the body of
* the message. This usually yields better results for the formatting
* required by this method. However, it also has the potential of being
* a security risk if malicious HTML code is embedded in the body. Therefore,
* you should always filter HTML from the result of this method before
* showing it in an environment where HTML is interpreted. If you are
* showing the results of this method in an HTML <textarea>, there is
* no need to worry about malicious HTML.
*
* @param message the message to quote.
* @param delimiter a String that will start each line of the quoted
* message. For example, "> ";
* @param lineLength the desired length of each line in the quoted message.
* @return the unfiltered body of the message in the "quote original" format.
*/
public static String quoteOriginal(String body, String delimiter,
int lineLength)
{
if (body == null || body.length() == 0) {
return "";
}
int length = body.length();
//Create a StringBuffer to hold the quoted body; approximate size.
StringBuffer buf = new StringBuffer(body.length());
//i maintains the current position in the String.
for (int i=0; i<length; ) {
String partialString =
StringUtils.chopAtWord(
body.substring(i),
lineLength
);
//System.out.println("--" + partialString);
i += partialString.length()+1;
buf.append(delimiter).append(partialString.trim()).append("\\n");
}
return buf.toString();
}
/**
* Returns a String describing the amount of time between now (current
* system time) and the passed in date time. Example output is "5 hours
* ago" or "Yesterday at 3:30 pm"
*
* @param date the Date to compare the current time with.
* @return a description of the difference in time, ie: "5 hours ago"
* or "Yesterday at 3:30pm"
*/
public static String dateToText( Date date ) {
if( date == null ) {
return "";
}
long delta = System.currentTimeMillis() - date.getTime();
// within the last hour
if( (delta / HOUR) < 1 ) {
long minutes = (delta/MINUTE);
if( minutes == 0 ) {
return "Less than 1 min ago";
}
else if( minutes == 1 ) {
return "1 minute ago";
}
else {
return ( minutes + " minutes ago" );
}
}
// sometime today
if( (delta / DAY) < 1 ) {
long hours = (delta/HOUR);
if( hours <= 1 ) {
return "1 hour ago";
}
else {
return ( hours + " hours ago" );
}
}
// within the last week
if( (delta / WEEK) < 1 ) {
double days = ((double)delta/(double)DAY);
if( days <= 1.0 ) {
return yesterdayFormatter.format(date);
}
else {
return dateFormatter.format(date);
}
}
// before a week ago
else {
return dateFormatter.format(date);
}
}
/**
* Returns true if the user is a system administrator.
*
* @param authToken the authentication token of the user
* @return true if the user is a system administrator, false otherwise.
*/
public static boolean isSystemAdmin( Authorization authToken ) {
ForumFactory forumFactory = ForumFactory.getInstance(authToken);
ForumPermissions permissions = forumFactory.getPermissions(authToken);
return permissions.get(ForumPermissions.SYSTEM_ADMIN);
}
/**
* Returns true if the user is a forum adminstrator of any forum in the
* system. For example, if there are 3 forums in the system and the user
* is an adminstrator of any one or more of them, this method will return
* true.<p>
*
* Use the method <code>isForumAdmin( Authorization, Forum)</code> to
* check an individual forum for administrator status.)
*
* @param authToken the authentication token of the user
* @return true if the user is a forum administrator of any forum in the system.
* @see SkinUtils#isForumAdmin(Authorization, Forum)
*/
public static boolean isForumAdmin( Authorization authToken ) {
ForumFactory forumFactory = ForumFactory.getInstance(authToken);
Iterator forumIterator = forumFactory.forums();
if( !forumIterator.hasNext() ) {
return false;
}
while( forumIterator.hasNext() ) {
Forum forum = (Forum)forumIterator.next();
if( forum.hasPermission(ForumPermissions.FORUM_ADMIN) ) {
return true;
}
}
return false;
}
/**
* Returns true if the user is a forum moderator of any forum in the
* system. For example, if there are 3 forums in the system and the user
* is a moderator of any one or more of them, this method will return
* true.<p>
*
* Use the method <code>isForumModerator( Authorization, Forum)</code> to
* check an individual forum for moderator status.)
*
* @param authToken the authentication token of the user
* @return true if the user is a forum moderator of any forum in the system.
* @see SkinUtils#isForumModerator(Authorization, Forum)
*/
public static boolean isForumModerator( Authorization authToken ) {
ForumFactory forumFactory = ForumFactory.getInstance(authToken);
Iterator forumIterator = forumFactory.forums();
if( !forumIterator.hasNext() ) {
return false;
}
while( forumIterator.hasNext() ) {
Forum forum = (Forum)forumIterator.next();
if( forum.hasPermission(ForumPermissions.MODERATOR) ) {
return true;
}
}
return false;
}
/**
* Returns true if the user is a forum adminstrator of the given forum.
*
* @param authToken the authentication token of the user
* @param forum the forum to check administrator status on.
* @return true if the user is a forum administrator of the given forum.
*/
public static boolean isForumAdmin( Authorization authToken, Forum forum ) {
return( forum.hasPermission(ForumPermissions.FORUM_ADMIN) );
}
/**
* Returns true if the user is a forum moderator of the given forum.
*
* @param authToken the authentication token of the user
* @param forum the forum to check moderator status on.
* @return true if the user is a forum moderator of the given forum.
*/
public static boolean isForumModerator( Authorization authToken, Forum forum ) {
return( forum.hasPermission(ForumPermissions.MODERATOR) );
}
/**
* Returns true if the user is a group administrator of any group in the
* system. For example, if there are 3 groups in the system and the user
* is an adminstrator of any one or more of them, this method will return
* true.<p>
*
* Use the method <code>isGroupAdmin( Authorization, Group)</code> to check
* an individual group for administrator status.)
*
* @see SkinUtils#isGroupAdmin(Authorization, Group)
*/
public static boolean isGroupAdmin( Authorization authToken ) {
ForumFactory forumFactory = ForumFactory.getInstance(authToken);
ProfileManager manager = forumFactory.getProfileManager();
Iterator groupIterator = manager.groups();
if( !groupIterator.hasNext() ) {
return false;
}
while( groupIterator.hasNext() ) {
Group group = (Group)groupIterator.next();
if( group.hasPermission(ForumPermissions.GROUP_ADMIN) ) {
return true;
}
}
return false;
}
/**
* Returns true if the user is a group administrator of the given group.
*
* @param authToken the authentication token of the user
* @param group the group to check administrator status on.
* @return true if the user is a group administrator of the given group.
*/
public static boolean isGroupAdmin( Authorization authToken, Group group ) {
return( group.hasPermission(ForumPermissions.GROUP_ADMIN) );
}
/**
* Builds a cookie string containing a username and password.<p>
*
* Note: with open source this is not really secure, but it prevents users
* from snooping the cookie file of others and by changing the XOR mask and
* character offsets, you can easily tweak results.
*
* @param username The username.
* @param password The password.
* @return String encoding the input parameters, an empty string if one of
* the arguments equals <code>null</code>.
*/
private static String encodePasswordCookie (String username, String password)
{
StringBuffer buf = new StringBuffer();
if (username != null && password != null) {
byte[] bytes = (username + ENCODE_DELIMETER + password).getBytes();
int b;
for (int n = 0; n < bytes.length; n++) {
b = bytes[n] ^ (ENCODE_XORMASK + n);
buf.append((char)(ENCODE_CHAR_OFFSET1 + (b & 0x0F)));
buf.append((char)(ENCODE_CHAR_OFFSET2 + ((b >> 4) & 0x0F)));
}
}
return buf.toString();
}
/**
* Unrafels a cookie string containing a username and password.
* @param value The cookie value.
* @return String[] containing the username at index 0 and the password at
* index 1, or <code>{ null, null }</code> if cookieVal equals
* <code>null</code> or the empty string.
*/
private static String[] decodePasswordCookie( String cookieVal ) {
// check that the cookie value isn't null or zero-length
if( cookieVal == null || cookieVal.length() <= 0 ) {
return null;
}
// unrafel the cookie value
char[] chars = cookieVal.toCharArray();
byte[] bytes = new byte[chars.length / 2];
int b;
for (int n = 0, m = 0; n < bytes.length; n++) {
b = chars[m++] - ENCODE_CHAR_OFFSET1;
b |= (chars[m++] - ENCODE_CHAR_OFFSET2) << 4;
bytes[n] = (byte)(b ^ (ENCODE_XORMASK + n));
}
cookieVal = new String(bytes);
int pos = cookieVal.indexOf(ENCODE_DELIMETER);
String username = (pos < 0) ? "" : cookieVal.substring(0, pos);
String password = (pos < 0) ? "" : cookieVal.substring(pos + 1);
return new String[] { username, password };
}
/**
* test method for this class
*/
/*
public static void main( String args[] ) {
Calendar cal = Calendar.getInstance();
System.out.println( "now:\t" + dateToText(cal.getTime()) );
for( int i=0; i<122; i++ ) {
cal.setTime( new Date(cal.getTime().getTime() - (30*MINUTE) ) );
System.out.println( (i+1) + " min ago:\t" + dateToText(cal.getTime()) + "\t" + cal.getTime() );
}
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -