all repos — honk @ e0286830e8c33a62501d9547afacb856d2050615

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	Place    *Place
 65	Time     *Time
 66}
 67
 68type OldRevision struct {
 69	Precis string
 70	Noise  string
 71}
 72
 73const (
 74	flagIsAcked  = 1
 75	flagIsBonked = 2
 76)
 77
 78func (honk *Honk) IsAcked() bool {
 79	return honk.Flags&flagIsAcked != 0
 80}
 81
 82func (honk *Honk) IsBonked() bool {
 83	return honk.Flags&flagIsBonked != 0
 84}
 85
 86type Donk struct {
 87	FileID  int64
 88	XID     string
 89	Name    string
 90	Desc    string
 91	URL     string
 92	Media   string
 93	Local   bool
 94	Content []byte
 95}
 96
 97type Place struct {
 98	Name      string
 99	Latitude  float64
100	Longitude float64
101	Url       string
102}
103
104type Time struct {
105	StartTime time.Time
106	EndTime   time.Time
107	Duration  time.Duration
108}
109
110type Honker struct {
111	ID     int64
112	UserID int64
113	Name   string
114	XID    string
115	Handle string
116	Flavor string
117	Combos []string
118}
119
120type Zonker struct {
121	ID        int64
122	Name      string
123	Wherefore string
124}
125
126var serverName string
127var iconName = "icon.png"
128var serverMsg = "Things happen."
129
130func ElaborateUnitTests() {
131}
132
133func main() {
134	cmd := "run"
135	if len(os.Args) > 1 {
136		cmd = os.Args[1]
137	}
138	switch cmd {
139	case "init":
140		initdb()
141	case "upgrade":
142		upgradedb()
143	}
144	db := opendatabase()
145	dbversion := 0
146	getconfig("dbversion", &dbversion)
147	if dbversion != myVersion {
148		log.Fatal("incorrect database version. run upgrade.")
149	}
150	getconfig("servermsg", &serverMsg)
151	getconfig("servername", &serverName)
152	getconfig("usersep", &userSep)
153	getconfig("honksep", &honkSep)
154	prepareStatements(db)
155	switch cmd {
156	case "adduser":
157		adduser()
158	case "cleanup":
159		arg := "30"
160		if len(os.Args) > 2 {
161			arg = os.Args[2]
162		}
163		cleanupdb(arg)
164	case "ping":
165		if len(os.Args) < 4 {
166			fmt.Printf("usage: honk ping from to\n")
167			return
168		}
169		name := os.Args[2]
170		targ := os.Args[3]
171		user, err := butwhatabout(name)
172		if err != nil {
173			log.Printf("unknown user")
174			return
175		}
176		ping(user, targ)
177	case "peep":
178		peeppeep()
179	case "run":
180		serve()
181	case "test":
182		ElaborateUnitTests()
183	default:
184		log.Fatal("unknown command")
185	}
186}