all repos — honk @ 5994028e0af9e7955775eb3c712842a34935e705

my fork of honk

honk.go (view raw)

  1//
  2// Copyright (c) 2019 Ted Unangst <tedu@tedunangst.com>
  3//
  4// Permission to use, copy, modify, and distribute this software for any
  5// purpose with or without fee is hereby granted, provided that the above
  6// copyright notice and this permission notice appear in all copies.
  7//
  8// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 10// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 11// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 12// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 13// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 14// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 15
 16package main
 17
 18import (
 19	"fmt"
 20	"html/template"
 21	"log"
 22	"os"
 23	"time"
 24)
 25
 26type WhatAbout struct {
 27	ID        int64
 28	Name      string
 29	Display   string
 30	About     string
 31	Key       string
 32	URL       string
 33	SkinnyCSS bool
 34}
 35
 36type Honk struct {
 37	ID       int64
 38	UserID   int64
 39	Username string
 40	What     string
 41	Honker   string
 42	Handle   string
 43	Oonker   string
 44	Oondle   string
 45	XID      string
 46	RID      string
 47	Date     time.Time
 48	URL      string
 49	Noise    string
 50	Precis   string
 51	Format   string
 52	Convoy   string
 53	Audience []string
 54	Public   bool
 55	Whofore  int64
 56	Replies  []*Honk
 57	Flags    int64
 58	HTPrecis template.HTML
 59	HTML     template.HTML
 60	Style    string
 61	Open     string
 62	Donks    []*Donk
 63	Onts     []string
 64}
 65
 66const (
 67	flagIsAcked  = 1
 68	flagIsBonked = 2
 69)
 70
 71func (honk *Honk) IsAcked() bool {
 72	return honk.Flags&flagIsAcked != 0
 73}
 74
 75func (honk *Honk) IsBonked() bool {
 76	return honk.Flags&flagIsBonked != 0
 77}
 78
 79type Donk struct {
 80	FileID  int64
 81	XID     string
 82	Name    string
 83	Desc    string
 84	URL     string
 85	Media   string
 86	Local   bool
 87	Content []byte
 88}
 89
 90type Honker struct {
 91	ID     int64
 92	UserID int64
 93	Name   string
 94	XID    string
 95	Handle string
 96	Flavor string
 97	Combos []string
 98}
 99
100type Zonker struct {
101	ID        int64
102	Name      string
103	Wherefore string
104}
105
106var serverName string
107var iconName = "icon.png"
108var serverMsg = "Things happen."
109
110func ElaborateUnitTests() {
111}
112
113func main() {
114	cmd := "run"
115	if len(os.Args) > 1 {
116		cmd = os.Args[1]
117	}
118	switch cmd {
119	case "init":
120		initdb()
121	case "upgrade":
122		upgradedb()
123	}
124	db := opendatabase()
125	dbversion := 0
126	getconfig("dbversion", &dbversion)
127	if dbversion != myVersion {
128		log.Fatal("incorrect database version. run upgrade.")
129	}
130	getconfig("servermsg", &serverMsg)
131	getconfig("servername", &serverName)
132	getconfig("usersep", &userSep)
133	getconfig("honksep", &honkSep)
134	getconfig("dnf", &donotfedafterdark)
135	prepareStatements(db)
136	switch cmd {
137	case "adduser":
138		adduser()
139	case "cleanup":
140		arg := "30"
141		if len(os.Args) > 2 {
142			arg = os.Args[2]
143		}
144		cleanupdb(arg)
145	case "ping":
146		if len(os.Args) < 4 {
147			fmt.Printf("usage: honk ping from to\n")
148			return
149		}
150		name := os.Args[2]
151		targ := os.Args[3]
152		user, err := butwhatabout(name)
153		if err != nil {
154			log.Printf("unknown user")
155			return
156		}
157		ping(user, targ)
158	case "peep":
159		peeppeep()
160	case "run":
161		serve()
162	case "test":
163		ElaborateUnitTests()
164	default:
165		log.Fatal("unknown command")
166	}
167}