diff --git a/.gitignore b/.gitignore index 8a9b369..75a083d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,8 @@ articles # generated files -webroot \ No newline at end of file +webroot + +# built binaries +go +srndv2 diff --git a/contrib/static/chen-chan-faq.html b/contrib/static/chen-chan-faq.html new file mode 100644 index 0000000..4592b8a --- /dev/null +++ b/contrib/static/chen-chan-faq.html @@ -0,0 +1,52 @@ +nntpchan faq + +

nntpchan faq

+
+
What is nntpchan?
+
NNTPCchan is a federated imageboard that spans across several networks including tor, i2p and anonet. There are no central servers so that as long as 1 server is left the forum will continue to function.
+
+
How is this different from *chan?
+
NNTPChan is by design invulnerable to global censorship. All moderation is local to each server.
+
+
How does moderation work then?
+
Moderation is done with our special tripcodes (ed25519-sha512 signed posts). Anyone can give moderation suggestions, but that doesn't mean anyone will accept them. Those who trust the actions of a moderator can have their frontend whitelist the moderation actions and have them performed without oversight by another moderator.
+
+
How can I remove content from nntpchan completely?
+
‾\(._.)/‾ I don't know. You probably can't unless every server agrees to remove the content, even then, nothing prevents someone from reposting it. You can't delete what you post on the internet.
+
+
do you allow child porn?
+
no.
+
+
Do you allow XYZ content?
+
If it violates USA Law or causes problems with my host, no. Otherwise, probably.
+
+
Someone posted something I don't like but it's not illegal
+
That is not my problem. All posts on this site are the responsibility of the individual poster and not the administration of this server
+
+
code, bugs, feature requests
+
frontend core
+
+

Please send any gripes/questions/inqueries/suggestions/complaints to ampernand [|at\] gmail {dot} com with subject starting with "nntpchan question"

+
+

ucavviu7wl6azuw7.onion frontend specific

+
+
admin's pubkey
+
06833a90237c61f59558c1726fbe71c63e972722b2cf1147867be286cb020b32
+ ▆☃►☐▣◼◡♵☕◘♁◲◯☾◱♆▾☗▧▢☲♏░◇☆◻♢☆♋▂▋▲
+
+
peering
+
just open a thread for now.
+
+
rules
+
basically no stuff that will fuck with the functioning of the site.
+ - stuff that will get me in trouble like cp.
+ - flood/spam. duplicate posts may also get baleeted. +
+
+
guidelines and things to keep in mind
+
+ - i don't owe you shiieet. you don't owe me shieet.
+ - administration style: benevolent dictatorship. +
+
+ diff --git a/contrib/static/chen-chan.css b/contrib/static/chen-chan.css new file mode 100644 index 0000000..ea49e4f --- /dev/null +++ b/contrib/static/chen-chan.css @@ -0,0 +1,7 @@ +body{font-family:monospace} +dl{max-width:84ch} +dd{margin-left:4ch;overflow:auto} +.memearrows{color:green} +pre{margin: 0 0 0 0} +table,th,td{border:1px solid gray} +table {border-collapse:collapse} \ No newline at end of file diff --git a/contrib/templates/chen-chan/board.mustache b/contrib/templates/chen-chan/board.mustache new file mode 100644 index 0000000..265c9f6 --- /dev/null +++ b/contrib/templates/chen-chan/board.mustache @@ -0,0 +1,27 @@ +{{! + board.mustache, displays the contents of page N of the board + + template parameters: + - board ( the model of the current page ) + - page ( the page number of the current page ) + + board has the properties: + - Prefix ( absolute path like //site.tld/ or /path/ ) + - Board ( the name of the board ) + - Navbar ( a function that renders the navbar, should not be escaped ) + - Threads ( a list of Thread Models with the last few replies ) +}} +{{board.Board}} + {{{board.Navbar}}} + {{{form}}} +
+
+ {{#board.Threads}} + {{{OP.Truncate.RenderPost}}} + {{#Truncate.Replies}} + {{{Truncate.RenderPost}}} + {{/Truncate.Replies}} +
+ {{/board.Threads}} +
+ diff --git a/contrib/templates/chen-chan/boardlist.mustache b/contrib/templates/chen-chan/boardlist.mustache new file mode 100644 index 0000000..f443599 --- /dev/null +++ b/contrib/templates/chen-chan/boardlist.mustache @@ -0,0 +1,33 @@ +{{! + boardlist.mustache -- full list of every board + template parameters: + - graph ( a list of 4 string tuples: (board, posts_per_hour, posts_per_day, total_posts) ) + - frontend ( the name of the frontend ) + - prefix ( the site's prefix ) +}} +{{frontend}} boards + + + + + + + + {{# graph}} + + + + + + + {{/ graph}} +
boardposts per hourposts per daytotal
+ {{Board}} + + {{Hour}} + + {{Day}} + + {{All}} +
+ diff --git a/contrib/templates/chen-chan/frontpage.mustache b/contrib/templates/chen-chan/frontpage.mustache new file mode 100644 index 0000000..246f007 --- /dev/null +++ b/contrib/templates/chen-chan/frontpage.mustache @@ -0,0 +1,11 @@ +{{! + frontpage.mustache -- template for index.html + template parameters: + - boardgraph ( a boardPageRows instance, see srnd/model.go ) + - postgraph ( a postsGraph instance , see srnd/model.go ) + - overview ( an overviewModel instance, see srnd/model.go ) + - totalposts ( the number of total posts we have ever seen ) + - frontend ( the name of the frontend ) + - prefix ( the site's prefix ) +}} +{{frontend}} on nntpchan

{{frontend}} on nntpchan

overboard boards faq

last posts:
{{{overview.Render}}}
board stats:
{{# boardgraph}}{{/ boardgraph}}
boardposts this hourposts todaytotal
{{Board}}{{Hour}}{{Day}}{{All}}
total stats:
{{{postsgraph.Render}}}

{{totalposts}} posts total since 2015-12-23

diff --git a/contrib/templates/chen-chan/graph_history.mustache b/contrib/templates/chen-chan/graph_history.mustache new file mode 100644 index 0000000..12eb506 --- /dev/null +++ b/contrib/templates/chen-chan/graph_history.mustache @@ -0,0 +1,36 @@ +{{! +graph_history.mustache +template parameters: +- history ( a list of PostEntry instances, see srnd/model.go ) + +}} + + + + + + Post History + + + + + + + + + + + + + {{#history.Scale}} + + + + + + {{/history.Scale}} + +
MonthPosts
{{Date}}{{Num}}{{OvercockGraph}}
+ + + diff --git a/contrib/templates/chen-chan/keygen.mustache b/contrib/templates/chen-chan/keygen.mustache new file mode 100644 index 0000000..8b41aea --- /dev/null +++ b/contrib/templates/chen-chan/keygen.mustache @@ -0,0 +1,15 @@ +{{! + keygen.mustache -- page containing a newly generated tripcode + template parameters: + - prefix ( the site prefix ) + - public ( the public key in hex ) + - secret ( the secret key in hex ) + - tripcode ( html version of the public key ) +}} +new tripcode
+new tripcode
+
+secret: {{secret}}
+public: {{public}}
+tripcode: {{{tripcode}}}
+
diff --git a/contrib/templates/chen-chan/modlogin.mustache b/contrib/templates/chen-chan/modlogin.mustache new file mode 100644 index 0000000..d6a9984 --- /dev/null +++ b/contrib/templates/chen-chan/modlogin.mustache @@ -0,0 +1,7 @@ +login +
+ + + +
+ diff --git a/contrib/templates/chen-chan/modlogin_result.mustache b/contrib/templates/chen-chan/modlogin_result.mustache new file mode 100644 index 0000000..a86984b --- /dev/null +++ b/contrib/templates/chen-chan/modlogin_result.mustache @@ -0,0 +1,9 @@ +{{! + modlogin_result.mustache -- shows the result of a login attempt + template parameters: + - prefix ( the site prefix ) + - mod_prefix ( the prefix to the mod panel, could be something like https://mod.site.tld/ or /mod/ ) + - message ( the message returned from the login attempt ) + - fail ( present if the login failed ) // not yet added +}} +login

{{message}}

diff --git a/contrib/templates/chen-chan/modpage.mustache b/contrib/templates/chen-chan/modpage.mustache new file mode 100644 index 0000000..29ff402 --- /dev/null +++ b/contrib/templates/chen-chan/modpage.mustache @@ -0,0 +1,79 @@ +{{! + modpage.mustache -- the moderator panel when logged in + template parameters: + - prefix ( the site's prefix ) +}} + + + + + nntpchan mod page + +
+
post actions
+
+
+ + +
+
+ + + +
+
+
+
+
key actions
+
+
+ + +
+
+ + +
+
+
+
+
board actions
+
+
+ + +
+
+ + + + + +
+
+
+
+
lightweight actions
+
+ +
+
+
+
very load heavy actions, use with care
+
+
+ + +
+
+
+
+
status
+
+
+ +
+
+ diff --git a/contrib/templates/chen-chan/navbar.mustache b/contrib/templates/chen-chan/navbar.mustache new file mode 100644 index 0000000..90f2a62 --- /dev/null +++ b/contrib/templates/chen-chan/navbar.mustache @@ -0,0 +1,12 @@ +{{! + navbar.mustache -- element on the top of each nod-mod page + + TODO: make this not suck, have a board list, have board page list + + template parameters: + - name ( the name of whatever resource we are on, board/thread ) + - frontend ( the name of the frontend we are on ) + - links ( a list of Link Models to display ) + - prefix ( site prefix ) + }} +

{{name}} on {{frontend}} | {{# links}} {{Text}} {{/ links}} | front page overboard

diff --git a/contrib/templates/chen-chan/newboard.mustache b/contrib/templates/chen-chan/newboard.mustache new file mode 100644 index 0000000..0ad89f1 --- /dev/null +++ b/contrib/templates/chen-chan/newboard.mustache @@ -0,0 +1 @@ +no apparently. diff --git a/contrib/templates/chen-chan/overview.mustache b/contrib/templates/chen-chan/overview.mustache new file mode 100644 index 0000000..ad5b3c3 --- /dev/null +++ b/contrib/templates/chen-chan/overview.mustache @@ -0,0 +1,7 @@ +{{! overview.mustache +paramters: + +- overview (list of PostModels in order of last posted) + +}} +{{#overview}}{{/overview}}
dateboardsubject
{{Date}}{{Board}}{{Truncate.Subject}}
diff --git a/contrib/templates/chen-chan/post.mustache b/contrib/templates/chen-chan/post.mustache new file mode 100644 index 0000000..a4854f5 --- /dev/null +++ b/contrib/templates/chen-chan/post.mustache @@ -0,0 +1,15 @@ +
+ {{ShortHash}} + {{Date}} + {{#IsI2P}}i2p{{/IsI2P}}{{#IsTor}}tor{{/IsTor}}{{#IsClearnet}}clr{{/IsClearnet}} + {{Subject}} + {{Name}} + {{{Pubkey}}} + [reply] +
+
+ {{{RenderBody}}} + {{#Attachments}} + file: {{Filename}}

+ {{/Attachments}} +
diff --git a/contrib/templates/chen-chan/post_fail.mustache b/contrib/templates/chen-chan/post_fail.mustache new file mode 100644 index 0000000..25085d0 --- /dev/null +++ b/contrib/templates/chen-chan/post_fail.mustache @@ -0,0 +1,3 @@ + + +

fail: {{reason}}

diff --git a/contrib/templates/chen-chan/post_retry.mustache b/contrib/templates/chen-chan/post_retry.mustache new file mode 100644 index 0000000..d235fbc --- /dev/null +++ b/contrib/templates/chen-chan/post_retry.mustache @@ -0,0 +1,40 @@ +try again +
+ {{#attachment}} + + + + {{/attachment}} + + + + + +
+
+
{{fail_message}}
+ + + + + + + + + + + +
+ Captcha + + captcha +
+ Solution + + + +
+
+
+
+ diff --git a/contrib/templates/chen-chan/post_success.mustache b/contrib/templates/chen-chan/post_success.mustache new file mode 100644 index 0000000..2db06f4 --- /dev/null +++ b/contrib/templates/chen-chan/post_success.mustache @@ -0,0 +1,7 @@ +{{! + post_success.mustache -- shown when we do a successful post + template parameters: + - redirect_url ( the url of the next page we should redirect to ) + - message_id ( the value of the Message-ID header in the post we made, the truncated sha1 of this is the >>posthash ) +}} +
posted as {{message_id}}
diff --git a/contrib/templates/chen-chan/postform.mustache b/contrib/templates/chen-chan/postform.mustache new file mode 100644 index 0000000..243d595 --- /dev/null +++ b/contrib/templates/chen-chan/postform.mustache @@ -0,0 +1,20 @@ +{{! + postform.mustache -- the form for posting + + template parameters: + - post_url ( the url of the post form ) + - reference ( the post we are replying to, or empty string if it's an op ) + - button ( the text for the reply button ) +}} +
+ +
+
+
+
+
+
+
+
+ captcha +
diff --git a/contrib/templates/chen-chan/posts_graph.mustache b/contrib/templates/chen-chan/posts_graph.mustache new file mode 100644 index 0000000..5ce3b9a --- /dev/null +++ b/contrib/templates/chen-chan/posts_graph.mustache @@ -0,0 +1,7 @@ +{{! +posts graph.mustache -- post frequence graph +parameters: + + * graph - a postsGraph instance (see srnd/model.go) +}} +{{#graph.Scale}}{{/graph.Scale}}
datepostscock
{{Day}}{{Num}}{{OvercockGraph}}
diff --git a/contrib/templates/chen-chan/thread.mustache b/contrib/templates/chen-chan/thread.mustache new file mode 100644 index 0000000..c2afb7f --- /dev/null +++ b/contrib/templates/chen-chan/thread.mustache @@ -0,0 +1,23 @@ +{{! + thread.mustache -- renders to a thread-*.html page, shows the entire thread + template parameters: + - board ( the Board Model of the board this thread was posted in ) + - thread ( the Thread Model of the current thread being rendered ) + - form ( the post form markup ) + + Thread Model attributes: + - OP , the Post Model of the original poster + - Replies , a list of all the replies or empty if none + - Board , the name of the Board this thread is on + - BoardURL , the url that points to the board index page +}} +{{thread.OP.Subject}} + {{{thread.Navbar}}} + {{{form}}} +
+ {{{thread.OP.RenderPost}}} + {{# thread.Replies}} + {{{RenderPost}}} + {{/ thread.Replies}} +
+ diff --git a/contrib/templates/chen-chan/ukko.mustache b/contrib/templates/chen-chan/ukko.mustache new file mode 100644 index 0000000..865f189 --- /dev/null +++ b/contrib/templates/chen-chan/ukko.mustache @@ -0,0 +1,19 @@ +{{! + ukko.mustache -- overboard, contains the last threads posted regardless of newsgroup + template parameters: + - prefix ( site prefix ) + - threads ( a list of Thread Models that represent the latest threads ) +}} +ukko/overboard + frontpage + {{#threads}} +
+

posted on {{OP.Board}}

+
+ {{{OP.Truncate.RenderPost}}} + {{#Truncate.Replies}} + {{{Truncate.RenderPost}}} + {{/Truncate.Replies}} +
+ {{/threads}} +