package zall; import java.io.IOException; import java.io.PrintWriter; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import zall.action.*; import zall.action.media.*; import zall.action.user.*; import zall.bean.*; import zall.util.Email; import zall.util.Email.ContentType; import zall.util.msg.UserMessage; import zall.util.msg.UserMessage.MessageType; import zutil.db.DBConnection; import zutil.log.LogUtil; public class ZalleryAjax extends HttpServlet{ public static final Logger logger = LogUtil.getLogger(); private static final long serialVersionUID = 1L; private HashMap actions; public void init(ServletConfig config) throws ServletException { super.init(config); // General registerAction(new LoginAction()); registerAction(new RegisterAction()); // User Actions registerAction(new ModifyUserAction()); registerAction(new ModifyUserStatusAction()); registerAction(new RemoveUserAction()); registerAction(new SendVerificationEmailAction()); registerAction(new VerifyEmailAction()); // Media Actions registerAction(new CommentAction()); registerAction(new CreateFolderAction()); registerAction(new ModifyMediaAction()); registerAction(new RemoveFolderAction()); registerAction(new RemoveMediaAction()); registerAction(new TogglePrivateAction()); } protected void registerAction(ZalleryAction action){ if(actions == null) actions = new HashMap(); actions.put(action.getActionId().toLowerCase(), action); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{ try { doGet(request, response, response.getWriter()); } catch (IOException e) { throw new ServletException(e); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException{ doGet(request, response, null); } /** * @param out is the PrintStream that will be used, no output will be generated if it is null */ public void doGet(HttpServletRequest request, HttpServletResponse response, PrintWriter out) throws ServletException{ DBConnection db = null; try { String actionStr = request.getParameter("action").toLowerCase(); HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); db = Zallery.getDB(); UserMessage msgs = UserMessage.getUserMessage(session); ZalleryAction action = actions.get( actionStr ); if( action != null ){ if( (action.requireUser() && user != null) || !action.requireUser() ){ action.handleRequest(db, request, response, session, out, user, msgs); } else{ // Unauthorized if( out != null ){ out.print( "{\"error\":\"Unauthorized user!\"}" ); response.setStatus( 401 ); } else msgs.add(MessageType.ERROR, "Unauthorized user!"); logger.severe("Unauthorized user!"); return; } } else{ // Unauthorized if( out != null ){ out.print( "{\"error\":\"Unknown action!\"}" ); response.setStatus( 404 ); } else msgs.add(MessageType.ERROR, "Unknown action: '"+actionStr+"'!"); logger.severe("Unknown action: '"+actionStr+"'!"); return; } } catch (Exception e) { if( out != null ){ out.println("{\"error\":\""+e.getMessage().replaceAll("\"", "\\\"")+"\"}"); logger.log(Level.SEVERE, "Exception in ajax page!", e); } else throw new ServletException(e); } finally{ if(db != null) db.close(); } } public static void sendEmailVerification(User user) throws IOException{ // Email Email smtpEmail = new Email("admin@koc.se", user.getEmail()); smtpEmail.setNiceFrom("Koc.se Admin"); smtpEmail.setSubject("Registration at "+Zallery.getWebsiteName()); smtpEmail.setContentType(ContentType.HTML); smtpEmail.setMessage("You receive this message because you have requested an account" + "
at "+Zallery.getWebsiteName()+". Please click the link to verify your email address: " + "

"+Zallery.getWebsiteURL()+"?action=verfemail&id="+user.getId()+"&hash="+user.getEmailVerificationHash()+"" + "

You will have to wait for an admin to activate your account after you have verified your email."); smtpEmail.send(); } public static void sendEmailNewUserToAdmin(User newuser, DBConnection db) throws SQLException, IOException{ // Email the admin about new user Email email = new Email("admin@koc.se", "admin@koc.se"); email.setNiceFrom("Koc.se Admin"); email.setSubject("New user activation request at "+Zallery.getWebsiteName()); email.setContentType(ContentType.HTML); email.setMessage("A new user has registered for an account at " + ""+Zallery.getWebsiteName()+":" + "

Email: " + newuser.getEmail() + "" + "
Name: " + newuser.getName() + "" + "
Facebook: "+newuser.getFacebookUid()+""); List admins = User.loadSuperUsers(db); for(User admin : admins){ if( admin.isEmailVerified() ){ email.setTo( admin.getEmail() ); email.send(); } } } }