⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lifeblogservices.java

📁 xwiki 源码
💻 JAVA
字号:
/**
 * 
 */
package com.xpn.xwiki.atom.lifeblog;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.atom.WSSEHttpHeader;
import com.xpn.xwiki.atom.XWikiHelper;


/**
 * @author Luis Arias <luis.arias@xwiki.com>
 *
 */
public class LifeblogServices {

  private String userName;
  private static final long NONCE_TIMEOUT = 1200000L;
  private XWikiHelper xwikiHelper;

  public LifeblogServices(XWikiContext context) {
	xwikiHelper = new XWikiHelper(context);
  }

  public boolean isAuthenticated() throws XWikiException, IOException {
    return isAuthenticated(xwikiHelper.getWSSEHeader());
  }
	  
  public boolean isAuthenticated(String header) throws XWikiException, IOException {
    if (header != null) {
      // Interpret WSSE Header and Authenticate User
      WSSEHttpHeader wsseHeader = WSSEHttpHeader.parseHttpHeader(header);
      
      if (nonceIsNotTooOld(wsseHeader.parseCreated())
          && !nonceAlreadyUsedByUser(wsseHeader.getNonce())) {
        userName = "XWiki." + wsseHeader.getUserName();
        
        String authenticationToken = xwikiHelper.getAtomAuthenticationToken(userName);

        if (authenticationToken !=null ) {
          if (wsseHeader.isAuthenticated(authenticationToken)) {
            return true;
          }        
        }        
      }
    }
    return false;
  }

  public void listUserBlogs() throws IOException, XWikiException {
    List userBlogs = xwikiHelper.listUserBlogs(userName);
    HttpServletResponse response = xwikiHelper.getResponse();
    response.setContentType("application/x.atom+xml");
    PrintWriter writer = new PrintWriter(response.getOutputStream());
    writer.write(getAtomListUserBlogs(userBlogs));
  }

  public String getAtomListUserBlogs(List userBlogs) {
    StringWriter stringWriter = new StringWriter();
    PrintWriter writer = new PrintWriter(stringWriter);
    writer.println("<?xml version=\"1.0\"?>");
    writer.println("<feed xmlns=\"http://purl.org/atom/ns#\">");
    Iterator it = userBlogs.iterator();
    while (it.hasNext()) {
      UserBlog userBlog = (UserBlog)it.next();
      writer.print("<link type=\"application/atom+xml\" rel=\"service.post\" href=\"");
      writer.print(userBlog.getPostHref());
      writer.print("\" title=\"");
      writer.print(userBlog.getTitle());
      writer.println("\"/>");
      writer.print("<link type=\"application/atom+xml\" rel=\"service.feed\" href=\"");
      writer.print(userBlog.getFeedHref());
      writer.print("\" title=\"");
      writer.print(userBlog.getTitle());
      writer.println("\"/>");
      writer.print("<link type=\"application/atom+xml\" rel=\"service.alternate\" href=\"");
      writer.print(userBlog.getAlternateHref());
      writer.print("\" title=\"");
      writer.print(userBlog.getTitle());
      writer.println("\"/>");
    }
    writer.print("</feed>");
    writer.flush();
    return stringWriter.toString();
  }
  
  private boolean nonceAlreadyUsedByUser(String nonce) {
    boolean alreadyUsed = false;
    HttpSession session = xwikiHelper.getSession();
    String lastNonce = (String) session.getAttribute("lastNonce");
    if (lastNonce != null) {
      alreadyUsed = lastNonce.equals(nonce);
    }
    if (!alreadyUsed) {
      session.setAttribute("lastNonce", nonce);
    }
    return alreadyUsed;
  }

  private boolean nonceIsNotTooOld(Calendar createdDate) {
    return Calendar.getInstance().getTimeInMillis() - createdDate.getTimeInMillis() <= NONCE_TIMEOUT;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -