more recent changes
This commit is contained in:
parent
378a257377
commit
4f3bc5cf6e
@ -22,7 +22,7 @@ CXXFLAGS := -std=c++14 -Wall -Wextra $(INC_FLAGS) -g
|
||||
all: $(EXE) $(TOOL)
|
||||
|
||||
$(EXE): $(OBJECTS)
|
||||
$(CXX) -o $(EXE) $(LD_FLAGS) $(OBJECTS) $(CXXFLAGS) nntpchan.cpp
|
||||
$(CXX) -o $(EXE) $(LD_FLAGS) $(OBJECTS) $(CXXFLAGS) nntpd.cpp
|
||||
|
||||
$(TOOL): $(OBJECTS)
|
||||
$(CXX) -o $(TOOL) $(LD_FLAGS) $(OBJECTS) $(CXXFLAGS) tool.cpp
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "storage.hpp"
|
||||
#include "nntp_server.hpp"
|
||||
#include "event.hpp"
|
||||
#include "exec_frontend.hpp"
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
@ -57,6 +58,26 @@ int main(int argc, char * argv[]) {
|
||||
nntp.SetLoginDB(nntpconf["authdb"]);
|
||||
}
|
||||
|
||||
if ( level.sections.find("frontend") != level.sections.end()) {
|
||||
// frontend enabled
|
||||
auto & frontconf = level.sections["frontend"];
|
||||
if (frontconf.find("type") == frontconf.end()) {
|
||||
std::cerr << "frontend section provided but 'type' value not provided" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
auto & ftype = frontconf.find("type");
|
||||
if (ftype == "exec") {
|
||||
if (frontconf.find("exec") == frontconf.end()) {
|
||||
std::cerr << "exec frontend specified but no 'exec' value provided" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
nntp.SetFrontend(new nntpchan::ExecFrontend(loop, frontconf["exec"]));
|
||||
} else {
|
||||
std::cerr << "unknown frontend type '" << ftype << "'" << std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
auto & a = nntpconf["bind"];
|
||||
|
||||
try {
|
9
contrib/backends/nntpchan-daemon/src/exec_frontend.hpp
Normal file
9
contrib/backends/nntpchan-daemon/src/exec_frontend.hpp
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef NNTPCHAN_EXEC_FRONTEND_HPP
|
||||
#define NNTPCHAN_EXEC_FRONTEND_HPP
|
||||
|
||||
namespace nntpchan
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif
|
25
contrib/backends/nntpchan-daemon/src/frontend.hpp
Normal file
25
contrib/backends/nntpchan-daemon/src/frontend.hpp
Normal file
@ -0,0 +1,25 @@
|
||||
#ifndef NNTPCHAN_FRONTEND_HPP
|
||||
#define NNTPCHAN_FRONTEND_HPP
|
||||
|
||||
namespace nntpchan
|
||||
{
|
||||
/** @brief nntpchan frontend ui interface */
|
||||
class Frontend
|
||||
{
|
||||
public:
|
||||
virtual ~Frontend() {}
|
||||
|
||||
/** @brief process an inbound message stored at fpath that we have accepted. */
|
||||
void ProcessNewMessage(const std::string & fpath) = 0;
|
||||
|
||||
/** @brief return true if we take posts in a newsgroup */
|
||||
bool AcceptsNewsgroup(const std::string & newsgroup) = 0;
|
||||
|
||||
/** @brief return true if we will accept a message given its message-id */
|
||||
bool AcceptsMessage(const std::string & msgid) = 0;
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
@ -2,6 +2,8 @@
|
||||
|
||||
## usage ##
|
||||
|
||||
### srndv2 unstable ###
|
||||
|
||||
add to nntpchan.json hooks section:
|
||||
|
||||
{
|
||||
@ -9,3 +11,12 @@ add to nntpchan.json hooks section:
|
||||
"exec": "/path/to/frontend.py"
|
||||
}
|
||||
|
||||
### nntpd ###
|
||||
|
||||
add this to nntpchan.ini
|
||||
|
||||
|
||||
...
|
||||
[frontend]
|
||||
type=exec
|
||||
exec=/path/to/frontend.py
|
||||
|
@ -1,9 +1,37 @@
|
||||
#!/usr/bin/env python3
|
||||
import nntpchan
|
||||
from nntpchan import message
|
||||
from nntpchan import db
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
msgid = sys.argv[1]
|
||||
group = sys.argv[2]
|
||||
if nntpchan.addArticle(msgid, group):
|
||||
nntpchan.regenerate(msgid, group)
|
||||
lvl = logging.INFO
|
||||
if 'NNTPCHAN_DEBUG' in os.environ:
|
||||
lvl = logging.DEBUG
|
||||
logging.basicConfig(level=lvl)
|
||||
l = logging.getLogger(__name__)
|
||||
cmd = sys.argv[1]
|
||||
if cmd == 'post':
|
||||
fpath = sys.argv[2]
|
||||
msg = None
|
||||
if not os.path.exists(fpath):
|
||||
print("{} does not exist".format(fpath))
|
||||
exit(1)
|
||||
with open(fpath) as f:
|
||||
msg = message.parse(f)
|
||||
if msg:
|
||||
l.debug("loaded {}".format(fpath))
|
||||
elif cmd == 'newsgroup':
|
||||
if db.allowsNewsgroup(sys.argv[2]):
|
||||
exit(0)
|
||||
else:
|
||||
exit(1)
|
||||
elif cmd == 'msgid':
|
||||
if db.allowsMessage(sys.argv[2]):
|
||||
exit(0)
|
||||
else:
|
||||
exit(1)
|
||||
elif cmd == 'init':
|
||||
db.init()
|
||||
|
11
contrib/frontends/py/nntpchan/config.py
Normal file
11
contrib/frontends/py/nntpchan/config.py
Normal file
@ -0,0 +1,11 @@
|
||||
#
|
||||
# please edit this file to contain the required information
|
||||
#
|
||||
|
||||
|
||||
""" path to article storage directory """
|
||||
storage = '/path/to/storage/'
|
||||
|
||||
""" database connector url """
|
||||
dburl = 'postgresql://user:password@localhost/database'
|
||||
#dburl = 'sqlite:///path/to/nntpchan.sqlite3'
|
16
contrib/frontends/py/nntpchan/db.py
Normal file
16
contrib/frontends/py/nntpchan/db.py
Normal file
@ -0,0 +1,16 @@
|
||||
from nntpchan import config
|
||||
|
||||
import sqlalchemy
|
||||
|
||||
def allowsMessage(msgid):
|
||||
return True
|
||||
|
||||
def allowsNewsgroup(group):
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def init():
|
||||
"""
|
||||
initialize db backend
|
||||
"""
|
5
contrib/js/neochan/init.coffee.js
Normal file
5
contrib/js/neochan/init.coffee.js
Normal file
@ -0,0 +1,5 @@
|
||||
// Generated by CoffeeScript 1.11.1
|
||||
(function() {
|
||||
|
||||
|
||||
}).call(this);
|
Reference in New Issue
Block a user