added: some work in RegisterMail plugin

(added looking for files in a config directory)



git-svn-id: svn://ttmath.org/publicrep/winix/trunk@1024 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2016-02-03 18:10:40 +00:00
parent 4fafd2a478
commit e53e2e6af9
10 changed files with 162 additions and 13 deletions

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,4 @@
[include "slog.html"]

View File

@ -274,6 +274,7 @@ mdb.o: ../../../winix/core/session.h ../../../winix/core/user.h
mdb.o: ../../../winix/core/plugindata.h ../../../winix/core/rebus.h
mdb.o: ../../../winix/core/ipban.h ../../../winix/core/mount.h
mdb.o: ../../../winix/templates/locale.h
registermail_info.o: registermail_info.h
templates.o: ../../../winix/templates/templates.h ../../../ezc/src/ezc.h
templates.o: ../../../ezc/src/generator.h ../../../ezc/src/blocks.h
templates.o: ../../../winix/core/item.h ../../../ezc/src/cache.h

View File

@ -1 +1 @@
o = funregistermail.o funregistermail_showusers.o init.o mdb.o templates.o
o = funregistermail.o funregistermail_showusers.o init.o mdb.o registermail_info.o templates.o

View File

@ -80,12 +80,28 @@ void FunRegisterMail::MakePost()
void FunRegisterMail::MakeGet()
{
mail = cur->request->ParamValue(L"mail");
TrimWhite(mail);
int list_id = Toi(cur->request->ParamValue(L"list_id"));
if( ValidateEmail(mail) )
if( pinfo->HasListId(list_id) )
{
log << log3 << "RM: registering e-mail address: " << mail << logend;
pmdb->AddMail(mail);
TrimWhite(mail);
if( ValidateEmail(mail) )
{
log << log3 << "RM: registering e-mail address: " << mail << logend;
slog << loginfo << "Thank you, your e-mail address has been added to our list" << logend;
pmdb->AddMail(list_id, mail);
}
else
{
log << log2 << "RM: email: " << mail << " doesn't seem to be correct (skipping)" << logend;
slog << logerror << "Sorry but the e-mail address: " << mail << " doesn't seem to be correct" << logend;
}
}
else
{
log << log2 << "RM: there is no a list with id: " << list_id << " (skipping request)" << logend;
}
}

View File

@ -69,11 +69,83 @@ void AddWinixFunctions(PluginInfo & info)
}
// create a class from these methods
void ReloadConfigFile(PluginInfo & info, Item & file)
{
PT::Space space;
PT::SpaceParser parser;
parser.SetSpace(space);
PT::SpaceParser::Status status = parser.ParseString(file.content);
if( status == PT::SpaceParser::syntax_error )
{
log << log1 << "MR: syntax error in file: " << file.url << ", line: " << parser.line << " (skipping this file)" << logend;
}
else
if( status == PT::SpaceParser::ok )
{
std::wstring * list_id_str = space.GetValue(L"list_id");
if( list_id_str )
{
int list_id = Toi(*list_id_str);
rm_info.lists.insert( std::make_pair(list_id, file.url) );
log << log3 << "RM: file: " << file.url << " parsed successfully" << logend;
}
else
{
log << log1 << "MR: file: " << file.url << " doesn't have a list_id defined (skipping this file)" << logend;
}
}
}
void ConfigReload(PluginInfo & info)
{
rm_info.lists.clear();
std::wstring dir_str = info.config->Text(L"rm_directory", L"/etc/registermail.d"); // !! give a better config variable name
if( dir_str.empty() )
{
log << log1 << "RM: rm_directory config option is empty" << logend;
return;
}
Item * dir = info.system->dirs.GetDir(dir_str);
if( dir )
{
DbItemQuery iq;
std::vector<Item> items;
iq.SetAll(true, false);
iq.WhereParentId(dir->id);
info.db->GetItems(items, iq);
for(Item & item : items)
{
ReloadConfigFile(info, item);
}
}
}
void ProcessRequest(PluginInfo & info)
{
if( info.cur->request->function == &info.functions->fun_reload )
{
if( info.cur->request->IsParam(L"mailregister") )
ConfigReload(info);
}
}
void InitPlugin(PluginInfo & info)
{
ConfigReload(info);
}
@ -102,11 +174,12 @@ using namespace MailRegister;
plugin.Assign(WINIX_CREATE_FUNCTIONS, AddWinixFunctions);
plugin.Assign(WINIX_PLUGIN_INIT, InitPlugin);
plugin.Assign(WINIX_PROCESS_REQUEST, ProcessRequest);
info.p1 = (void*)(plugin_name);
}

View File

@ -43,7 +43,7 @@ namespace MailRegister
bool MDb::AddMail(const std::wstring & mail)
bool MDb::AddMail(int list_id, const std::wstring & mail)
{
PGresult * r = 0;
Error status = WINIX_ERR_OK;
@ -51,7 +51,8 @@ bool MDb::AddMail(const std::wstring & mail)
try
{
query.Clear();
query << R("insert into plugins.registermail (mail) values (")
query << R("insert into plugins.registermail (list_id, mail) values (")
<< list_id
<< mail
<< R(");");

View File

@ -40,20 +40,25 @@
#include "db/dbbase.h"
#include "core/dirs.h"
namespace Winix
{
namespace MailRegister
{
class MDb : public DbBase
{
public:
bool AddMail(const std::wstring & mail);
bool AddMail(int list_id, const std::wstring & mail);
bool GetUsers(std::vector<std::wstring> & container, bool clear_container = true);

View File

@ -0,0 +1,46 @@
/*
* This file is a part of Winix
* and is distributed under the 2-Clause BSD licence.
* Author: Tomasz Sowa <t.sowa@ttmath.org>
*/
/*
* Copyright (c) 2016, Tomasz Sowa
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "registermail_info.h"
bool RegisterMailInfo::HasListId(int id)
{
return lists.find(id) != lists.end();
}

View File

@ -37,6 +37,7 @@
#include <string>
#include <vector>
#include <map>
@ -46,9 +47,11 @@ public:
std::vector<std::wstring> mail_list;
// list_id -> config_file (without dir)
std::map<int, std::wstring> lists;
bool HasListId(int id);
};