/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * admin_connection.cc * * Thu Feb 3 09:33:44 CET 2011 * Copyright 2011 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of Pracro. * * Pracro is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Pracro is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Pracro; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "admin_connection.h" #include "admin_rc.h" #include "debug.h" static std::string admin_sessionunlock(Environment &env, std::string id) { Session *session = env.sessions.session(id); if(session) { if(session->isreadonly) { env.sessions.deleteSession(id); return "Session " + id + " was 'readonly' and has been discarded."; } else { session->setActive(false); return "Session " + id + " has been deactivated (set to idle)."; } } return "Session " + id + " does not exist or has been committed."; } AdminConnection::AdminConnection(Environment &e, headers_t a, std::string u) : env(e), args(a), uri(u) {} AdminConnection::~AdminConnection() {} bool AdminConnection::handle(const char *data, size_t size) { if(data == NULL && size == 0) { DEBUG(admin, "URI: %s\n", uri.c_str()); if(uri == "/") { reply = admin_rc("header") + "Command list:\n" "/sessionunlock?id=[ID] unlock session with [ID] as its session id.\n" + admin_rc("footer"); return true; } if(uri == "/sessionunlock" && args.find("id") != args.end()) { reply = admin_rc("header") + admin_sessionunlock(env, args["id"]) + admin_rc("footer"); return true; } if(uri == "/favicon.ico") { reply = admin_rc("favicon"); return true; } reply = "'" + uri + "' not recognised as a valid command."; return true; } return true; } void AdminConnection::getReply(Httpd::Reply &r) { headers_t hdrs; if(uri == "/favicon.ico") hdrs["Content-Type"] = "image/ico"; else hdrs["Content-Type"] = "text/html; charset=UTF-8"; r.data = reply; r.headers = hdrs; r.status = 200; // http 'OK' } #ifdef TEST_ADMIN_CONNECTION //deps: //cflags: //libs: #include "test.h" TEST_BEGIN; // TODO: Put some testcode here (see test.h for usable macros). TEST_END; #endif/*TEST_ADMIN_CONNECTION*/