Compare commits

...

5 Commits

@ -1328,6 +1328,9 @@ var oldjonks = cache.New(cache.Options{Filler: func(xid string) ([]byte, bool) {
}
donksforhonks([]*Honk{honk})
_, j := jonkjonk(user, honk)
if j == nil {
elog.Fatalf("what just happened? %v", honk)
}
j["@context"] = itiswhatitis
return j.ToBytes(), true

@ -1091,6 +1091,30 @@ func cleanupdb(arg string) {
}
}
func getusercount() int {
row := stmtGetUserCount.QueryRow()
var count int
row.Scan(&count)
return count
}
func getactiveusercount(monthsago int) int {
origin := time.Now().AddDate(0, -monthsago, 0).UTC().Format(dbtimeformat)
row := stmtGetActiveUserCount.QueryRow(origin)
var count int
row.Scan(&count)
return count
}
func getlocalhonkcount() int {
row := stmtGetLocalHonkCount.QueryRow()
var count int
row.Scan(&count)
return count
}
var stmtHonkers, stmtDubbers, stmtNamedDubbers, stmtSaveHonker, stmtUpdateFlavor, stmtUpdateHonker *sql.Stmt
var stmtDeleteHonker *sql.Stmt
var stmtAnyXonk, stmtOneXonk, stmtPublicHonks, stmtUserHonks, stmtHonksByCombo, stmtHonksByConvoy *sql.Stmt
@ -1109,6 +1133,9 @@ var stmtSaveMeta, stmtDeleteAllMeta, stmtDeleteOneMeta, stmtDeleteSomeMeta, stmt
var stmtHonksISaved, stmtGetFilters, stmtSaveFilter, stmtDeleteFilter *sql.Stmt
var stmtGetTracks *sql.Stmt
var stmtSaveChonk, stmtLoadChonks, stmtGetChatters *sql.Stmt
var stmtGetUserCount *sql.Stmt
var stmtGetActiveUserCount *sql.Stmt
var stmtGetLocalHonkCount *sql.Stmt
func preparetodie(db *sql.DB, s string) *sql.Stmt {
stmt, err := db.Prepare(s)
@ -1194,4 +1221,7 @@ func prepareStatements(db *sql.DB) {
stmtSaveChonk = preparetodie(db, "insert into chonks (userid, xid, who, target, dt, noise, format) values (?, ?, ?, ?, ?, ?, ?)")
stmtLoadChonks = preparetodie(db, "select chonkid, userid, xid, who, target, dt, noise, format from chonks where userid = ? and dt > ? order by chonkid asc")
stmtGetChatters = preparetodie(db, "select distinct(target) from chonks where userid = ?")
stmtGetUserCount = preparetodie(db, "select count(*) from users where userid > 0")
stmtGetActiveUserCount = preparetodie(db, "select count(distinct honker) from honks where whofore = 2 and dt > ?")
stmtGetLocalHonkCount = preparetodie(db, "select count(*) from honks where whofore = 2")
}

@ -0,0 +1,42 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1667991831,
"narHash": "sha256-DHgEsLZI044B9T4AjA3K6+yB9/DqLr4dyA7OIx0FG7o=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "872fceeed60ae6b7766cc0a4cd5bf5901b9098ec",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-unstable",
"type": "indirect"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"utils": "utils"
}
},
"utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

@ -0,0 +1,40 @@
{
description = "honk";
inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable";
utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, utils }:
utils.lib.eachDefaultSystem (system:
let
lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101";
version = builtins.substring 0 8 lastModifiedDate;
pkgs = import nixpkgs {
inherit system;
overlays = [
(final: prev: {
go = prev.go_1_19;
buildGoModule = prev.buildGo118Module;
})
];
};
in {
devShell = pkgs.mkShell {
CFLAGS="-I${pkgs.sqlite.dev}/include";
buildInputs = with pkgs; [ go gopls gotools go-tools golangci-lint sqlite];
};
defaultPackage = pkgs.buildGoModule {
pname = "honk";
inherit version;
src = ./.;
vendorSha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
};
});
}

@ -28,7 +28,7 @@ import (
"humungus.tedunangst.com/r/webs/htfilter"
)
var tweetsel = cascadia.MustCompile("div[itemProp=articleBody]")
var tweetsel = cascadia.MustCompile("div[data-testid=tweetText]")
var linksel = cascadia.MustCompile("a time")
var replyingto = cascadia.MustCompile(".ReplyingToContextBelowAuthor")
var imgsel = cascadia.MustCompile("div[data-testid=tweetPhoto] img")
@ -66,7 +66,7 @@ func hootextractor(r io.Reader, url string, seen map[string]bool) string {
divs := tweetsel.MatchAll(root)
for i, div := range divs {
{
twp := div.Parent.Parent.Parent
twp := div.Parent.Parent.Parent.Parent.Parent
link := url
alink := linksel.MatchFirst(twp)
if alink == nil {
@ -100,7 +100,7 @@ func hootextractor(r io.Reader, url string, seen map[string]bool) string {
continue
}
twp := div.Parent.Parent.Parent
twp := div.Parent.Parent.Parent.Parent.Parent
link := url
alink := linksel.MatchFirst(twp)
if alink == nil {

@ -9,11 +9,11 @@ if [ "$v" \< "go1.16" ] ; then
false
fi
if [ \! \( -e /usr/include/sqlite3.h -o -e /usr/local/include/sqlite3.h \) ] ; then
echo unable to find sqlite3.h header
echo please install libsqlite3 dev package
false
fi
# if [ \! \( -e /usr/include/sqlite3.h -o -e /usr/local/include/sqlite3.h \) ] ; then
# echo unable to find sqlite3.h header
# echo please install libsqlite3 dev package
# false
# fi
touch .preflightcheck

@ -2098,6 +2098,49 @@ func fingerlicker(w http.ResponseWriter, r *http.Request) {
j.Write(w)
}
func knowninformation(w http.ResponseWriter, r *http.Request) {
j := junk.New()
l := junk.New()
l["type"] = `http://nodeinfo.diaspora.software/ns/schema/2.0`
l["href"] = fmt.Sprintf("https://%s/nodeinfo/2.0", serverName)
j["links"] = []junk.Junk{l}
w.Header().Set("Content-Type", "application/json")
j.Write(w)
}
func actualinformation(w http.ResponseWriter, r *http.Request) {
j := junk.New()
soft := junk.New()
soft["name"] = "honk"
soft["version"] = softwareVersion
services := junk.New()
services["inbound"] = []string{}
services["outbound"] = []string{"rss2.0"}
users := junk.New()
users["total"] = getusercount()
users["activeHalfyear"] = getactiveusercount(6)
users["activeMonth"] = getactiveusercount(1)
usage := junk.New()
usage["users"] = users
usage["localPosts"] = getlocalhonkcount()
j["version"] = "2.0"
j["protocols"] = []string{"activitypub"}
j["software"] = soft
j["services"] = services
j["openRegistrations"] = false
j["usage"] = usage
w.Header().Set("Content-Type", "application/json")
j.Write(w)
}
func somedays() string {
secs := 432000 + notrand.Int63n(432000)
return fmt.Sprintf("%d", secs)
@ -2350,6 +2393,9 @@ func apihandler(w http.ResponseWriter, r *http.Request) {
case "home":
honks = gethonksforuser(userid, wanted)
honks = osmosis(honks, userid, true)
case "myhonks":
honks = gethonksbyuser(u.Username, true, wanted)
honks = osmosis(honks, userid, true)
default:
http.Error(w, "unknown page", http.StatusNotFound)
return
@ -2495,6 +2541,8 @@ func serve() {
getters.HandleFunc("/emu/{emu:[^.]*[^/]+}", serveemu)
getters.HandleFunc("/meme/{meme:[^.]*[^/]+}", servememe)
getters.HandleFunc("/.well-known/webfinger", fingerlicker)
getters.HandleFunc("/.well-known/nodeinfo", knowninformation)
getters.HandleFunc("/nodeinfo/2.0", actualinformation)
getters.HandleFunc("/flag/{code:.+}", showflag)

Loading…
Cancel
Save