package de.skuzzle.polly.core.internal.httpv2; import java.util.HashMap; import java.util.Map; import de.skuzzle.polly.http.annotations.Get; import de.skuzzle.polly.http.annotations.OnRegister; import de.skuzzle.polly.http.annotations.Param; import de.skuzzle.polly.http.api.AlternativeAnswerException; import de.skuzzle.polly.http.api.Controller; import de.skuzzle.polly.http.api.HttpSession; import de.skuzzle.polly.http.api.answers.HttpAnswer; import de.skuzzle.polly.http.api.answers.HttpAnswers; import de.skuzzle.polly.sdk.MyPolly; import de.skuzzle.polly.sdk.httpv2.PollyController; import de.skuzzle.polly.sdk.httpv2.WebinterfaceManager; import de.skuzzle.polly.sdk.roles.RoleManager; public class SessionController extends PollyController { private final static String ADMIN_CATEGORY_KEY = "sessionAdminCategory"; //$NON-NLS-1$ private final static String SESSION_NAME_KEY = "sessionManagerPage"; //$NON-NLS-1$ private final static String SESSION_DESC_KEY = "sessionManagerDesc"; //$NON-NLS-1$ public final static String PAGE_SESSION_MANAGER = "/pages/sessions"; //$NON-NLS-1$ private final static String CONTENT_SESSION_MANAGER = "templatesv2/sessions.html"; //$NON-NLS-1$ public final static String API_KILL_SESSION = "/api/killSession"; //$NON-NLS-1$ public final static String API_DETACH = "/api/detach"; //$NON-NLS-1$ public final static String API_GET_EVENTS = "/api/getEvents"; //$NON-NLS-1$ private static final String CONTENT_GET_EVENTS = "templatesv2/session.events.html"; //$NON-NLS-1$ public SessionController(MyPolly myPolly) { super(myPolly); } @Override protected Controller createInstance() { return new SessionController(this.getMyPolly()); } @Get(value = PAGE_SESSION_MANAGER, name = SESSION_NAME_KEY) @OnRegister({ WebinterfaceManager.ADD_MENU_ENTRY, MSG.FAMILY, ADMIN_CATEGORY_KEY, SESSION_DESC_KEY, RoleManager.ADMIN_PERMISSION }) public HttpAnswer sessions() throws AlternativeAnswerException { this.requirePermissions(RoleManager.ADMIN_PERMISSION); final Map<String, Object> c = this.createContext(CONTENT_SESSION_MANAGER); c.put("allSessions", this.getMyPolly().webInterface().getServer().getSessions()); //$NON-NLS-1$ return this.makeAnswer(c); } @Get(API_KILL_SESSION) public HttpAnswer killSession(@Param("id") String id) throws AlternativeAnswerException { this.requirePermissions(RoleManager.ADMIN_PERMISSION); final HttpSession session = this.getServer().findSession(id); if (session != null) { session.kill(); return HttpAnswers.newStringAnswer("success"); //$NON-NLS-1$ } return HttpAnswers.newStringAnswer("fail"); //$NON-NLS-1$ } @Get(API_DETACH) public HttpAnswer detachItem(@Param("id") String id, @Param("key") String key) throws AlternativeAnswerException { this.requirePermissions(RoleManager.ADMIN_PERMISSION); final HttpSession session = this.getServer().findSession(id); if (session != null) { session.detach(key); return HttpAnswers.newStringAnswer("success"); //$NON-NLS-1$ } return HttpAnswers.newStringAnswer("fail"); //$NON-NLS-1$ } @Get(API_GET_EVENTS) public HttpAnswer listSessions(@Param("id") String id) throws AlternativeAnswerException { if (!this.getMyPolly().roles().hasPermission( this.getSessionUser(), RoleManager.ADMIN_PERMISSION)) { return HttpAnswers.newStringAnswer(MSG.bind(MSG.sessionRequiredPermission, RoleManager.ADMIN_PERMISSION)); } final HttpSession session = this.getServer().findSession(id); final Map<String, Object> c = new HashMap<>(); c.put("myPolly", this.getMyPolly()); //$NON-NLS-1$ c.put("ss", session); //$NON-NLS-1$ return HttpAnswers.newTemplateAnswer(CONTENT_GET_EVENTS, c); } }