rapture

moderation tools for thuja
git clone git://kqueue.dev/rapture.git
Log | Files | Refs | README | LICENSE

rapture.go (3746B)


      1 package main
      2 import (
      3 	bolt "go.etcd.io/bbolt"
      4 	"fmt"
      5 	"flag"
      6 	"encoding/json"
      7 	"strconv"
      8 	"strings"
      9 	"os"
     10 )
     11 // defines json format for all posts made
     12 type postform struct {
     13         Title       string   `json:"title"`
     14         Text        string   `json:"text"`
     15         Id          int      `json:"id"`
     16         Commentsnum int      `json:"commentsnum"`
     17         Comments    []string `json:"comments"`
     18         Ip          string   `json:"ip"`
     19 }
     20 var (
     21 	dbpath *string
     22 	board *string
     23 	id *int
     24 	postrange *string
     25 	staticdir *string
     26 )
     27 // gets keys out the bolt database
     28 func databaseget(key string, bucket string) (string, error) {
     29         db, err := bolt.Open(*dbpath, 0600, nil)
     30         errmsg := "something fucked up"
     31         if err != nil {
     32                 return errmsg, err
     33         }
     34         defer db.Close()
     35         tx, err := db.Begin(true)
     36         if err != nil {
     37                 return errmsg, err
     38         }
     39         defer tx.Rollback()
     40         //      _, err = tx.CreateBucketIfNotExists([]byte(bucket))
     41         //      if err != nil {
     42         //              return errmsg, err
     43         //      }
     44         b := tx.Bucket([]byte(bucket))
     45         v := b.Get([]byte(key))
     46         if v == nil {
     47                 return "empty key", nil
     48         }
     49         return string(v), nil
     50 }
     51 func databaseoverwrite(key string, value string, bucket string) error {
     52         db, err := bolt.Open(*dbpath, 0600, nil)
     53         if err != nil {
     54                 return err
     55         }
     56         defer db.Close()
     57         tx, err := db.Begin(true)
     58         if err != nil {
     59                 return err
     60         }
     61         defer tx.Rollback()
     62         _, err = tx.CreateBucketIfNotExists([]byte(bucket))
     63         if err != nil {
     64                 return err
     65         }
     66         b := tx.Bucket([]byte(bucket))
     67         err = b.Delete([]byte(key))
     68         if err != nil {
     69                 return err
     70         }
     71         err = b.Put([]byte(key), []byte(value))
     72         if err != nil {
     73                 return err
     74         }
     75         if err := tx.Commit(); err != nil {
     76                 return err
     77         }
     78         return nil
     79 }
     80 func main(){
     81      dbpath = flag.String("db", "/var/thuja/thuja.db", "where thuja's bolt database is stored, must be readable and writable by thuja")
     82      board = flag.String("b", "nil", "the board to delete the post from")
     83       staticdir = flag.String("staticdir", "/var/thuja/public", "the directory where index.html and image files are stored, must be readable and writable by thuja")
     84      id = flag.Int("id", -1, "the id to delete")
     85      postrange = flag.String("range", "nil", "deletes a range of posts")
     86      flag.Parse()
     87      var deleteid bool
     88      var deleterange bool
     89      if(*board == "nil"){
     90 	fmt.Fprintf(os.Stderr, "specify the board to delete from\n")
     91 	return
     92      }
     93      if(*id != -1){
     94 	deleteid = true
     95      }
     96      if(*postrange != "nil"){
     97 	deleterange = true
     98      }
     99      if(*postrange == "nil" && *id == -1){
    100 	fmt.Fprintf(os.Stderr, "either specify a post id or specify a post range\n")
    101 	return
    102      }
    103      if(deleteid == true){
    104 	     post, err := databaseget(strconv.Itoa(*id), *board)
    105 	     if (err != nil){
    106 		fmt.Fprintf(os.Stderr, "error occured\n")
    107 		return
    108 	     }
    109 	     var jsonpost postform
    110 	     json.Unmarshal([]byte(post), &jsonpost)
    111 	     fmt.Printf("%s\n", jsonpost.Ip)
    112 	     databaseoverwrite(strconv.Itoa(*id), "NULL", *board)
    113 	path := fmt.Sprintf("%s/%s-%d.jpg", *staticdir, *board, *id)
    114 	os.Remove(path)
    115      }
    116      if(deleterange == true){
    117 	v := strings.Split(*postrange, "-")
    118 	postid, _ := strconv.Atoi(v[0])
    119 	postmax, _ := strconv.Atoi(v[1])
    120 	for ; postid <= postmax; postid++{
    121 	path := fmt.Sprintf("%s/%s-%d.jpg", *staticdir, *board, *id)
    122 	os.Remove(path)
    123 	databaseoverwrite(strconv.Itoa(postid), "NULL", *board)
    124 	}
    125      }
    126      return
    127 }