/*
 * @(#)ArtifactReceiverServlet.java
 *
 * Copyright (C) 2006 Infocity Inc. All Rights Reserved.
 */
package test.info.dragonlady.sso.servlet;

import info.dragonlady.sso.ArtifactReceiver;
import info.dragonlady.sso.SSOConstants;
import info.dragonlady.sso.SSOException;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * アーティファクト受信処理サーブレット。
 * 
 * @author Hiroshi.Ebata(INFOCITY)
 * @version $Revision: 1.0 $ $Date: 2006/10/19 17:39:32 $
 */
public class ArtifactReceiverServlet extends HttpServlet {

	/**
	 * コンストラクタ。
	 */
	public ArtifactReceiverServlet() {
		super();
	}

	/* (非 Javadoc)
	 * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			ArtifactReceiver receiver = new ArtifactReceiver(request, response);
			// 受信した要求パラメータのアーティファクトをSAML要求に含めて送信し、対応するアサーションを取得する
//			receiver.receive(request.getParameter(SSOConstants.NAME_SAMLART));
			receiver.receive();
			// アサーションから抽出した認証ID、属性情報を元に、目的サイトへの転送を許可するか確認する
			String authId = receiver.getAuthId();
			Map attributes = receiver.getAttributes();
			boolean valid = false; // 検証結果フラグ
			// TODO 検証処理の実装
			valid = true; // ダミー

			if(valid) {
				// TODO 取得した認証IDをログイン状態にする
				request.getSession().setAttribute("user_id", authId); // ダミー

				// 目的サイトへリダイレクト
				receiver.redirectToTarget();
			} else {
				// TODO 転送不許可の場合の処理（ログインページへリダイレクト等）
				request.getSession().setAttribute("target", receiver.getTargetUrl());
				response.sendRedirect("/sso_sample/login.html"); // ダミー（ログイン後に目的サイトを表示）
			}
		} catch(SSOException e) {
			throw new ServletException(e);
		} catch(Exception e) {
			throw new ServletException(e);
		}
	}

}
