all repos — honk @ feed6cd9157673e741c1d421053970f70eb42acd

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	Convoy   string
 52	Audience []string
 53	Public   bool
 54	Whofore  int64
 55	Replies  []*Honk
 56	Flags    int64
 57	HTML     template.HTML
 58	Style    string
 59	Open     string
 60	Donks    []*Donk
 61	Onts     []string
 62}
 63
 64const (
 65	flagIsAcked  = 1
 66	flagIsBonked = 2
 67)
 68
 69func (honk *Honk) IsAcked() bool {
 70	return honk.Flags&flagIsAcked != 0
 71}
 72
 73func (honk *Honk) IsBonked() bool {
 74	return honk.Flags&flagIsBonked != 0
 75}
 76
 77type Donk struct {
 78	FileID  int64
 79	XID     string
 80	Name    string
 81	Desc    string
 82	URL     string
 83	Media   string
 84	Local   bool
 85	Content []byte
 86}
 87
 88type Honker struct {
 89	ID     int64
 90	UserID int64
 91	Name   string
 92	XID    string
 93	Handle string
 94	Flavor string
 95	Combos []string
 96}
 97
 98type Zonker struct {
 99	ID        int64
100	Name      string
101	Wherefore string
102}
103
104var serverName string
105var iconName = "icon.png"
106var serverMsg = "Things happen."
107
108func ElaborateUnitTests() {
109}
110
111func main() {
112	cmd := "run"
113	if len(os.Args) > 1 {
114		cmd = os.Args[1]
115	}
116	switch cmd {
117	case "init":
118		initdb()
119	case "upgrade":
120		upgradedb()
121	}
122	db := opendatabase()
123	dbversion := 0
124	getconfig("dbversion", &dbversion)
125	if dbversion != myVersion {
126		log.Fatal("incorrect database version. run upgrade.")
127	}
128	getconfig("servermsg", &serverMsg)
129	getconfig("servername", &serverName)
130	getconfig("usersep", &userSep)
131	getconfig("honksep", &honkSep)
132	getconfig("dnf", &donotfedafterdark)
133	prepareStatements(db)
134	switch cmd {
135	case "adduser":
136		adduser()
137	case "cleanup":
138		arg := "30"
139		if len(os.Args) > 2 {
140			arg = os.Args[2]
141		}
142		cleanupdb(arg)
143	case "ping":
144		if len(os.Args) < 4 {
145			fmt.Printf("usage: honk ping from to\n")
146			return
147		}
148		name := os.Args[2]
149		targ := os.Args[3]
150		user, err := butwhatabout(name)
151		if err != nil {
152			log.Printf("unknown user")
153			return
154		}
155		ping(user, targ)
156	case "peep":
157		peeppeep()
158	case "run":
159		serve()
160	case "test":
161		ElaborateUnitTests()
162	default:
163		log.Fatal("unknown command")
164	}
165}