Lindenii Project Forge
Commit info | |
---|---|
ID | 74348a39caf2985d475d30408b353cac07b260b7 |
Author | Runxi Yu<me@runxiyu.org> |
Author date | Sat, 08 Mar 2025 13:53:54 +0800 |
Committer | Runxi Yu<me@runxiyu.org> |
Committer date | Sat, 08 Mar 2025 13:53:54 +0800 |
Actions | Get patch |
*: Add missing license headers
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-FileContributor: Runxi Yu <https://runxiyu.org>
root = true [*] end_of_line = lf insert_final_newline = true indent_style = tab indent_size = 8 tab_size = 8 [*.py] indent_style = space indent_size = 4 [*.yaml] indent_style = space indent_size = 2
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-FileContributor: Runxi Yu <https://runxiyu.org>
package main import ( "bufio" "context" "errors" "io" "net/http" "net/url" "strings" "github.com/jackc/pgx/v5" ) func check_and_update_federated_user_status(ctx context.Context, user_id int, service, remote_username, pubkey string) (bool, error) { var err error var resp *http.Response matched := false username_escaped := url.PathEscape(remote_username) switch service { case "sr.ht": resp, err = http.Get("https://meta.sr.ht/~" + username_escaped + ".keys") case "github": resp, err = http.Get("https://github.com/" + username_escaped + ".keys") case "codeberg": resp, err = http.Get("https://codeberg.org/" + username_escaped + ".keys") case "tangled": resp, err = http.Get("https://tangled.sh/keys/" + username_escaped) // TODO: Don't rely on one webview default: return false, errors.New("unknown federated service") } if err != nil { return false, err } defer func() { _ = resp.Body.Close() }() buf := bufio.NewReader(resp.Body) for { line, err := buf.ReadString('\n') if errors.Is(err, io.EOF) { break } else if err != nil { return false, err } line_split := strings.Split(line, " ") if len(line_split) < 2 { continue } line = strings.Join(line_split[:2], " ") if line == pubkey { matched = true break } } if !matched { return false, nil } var tx pgx.Tx if tx, err = database.Begin(ctx); err != nil { return false, err } defer func() { _ = tx.Rollback(ctx) }() if _, err = tx.Exec(ctx, `UPDATE users SET type = 'federated' WHERE id = $1 AND type = 'pubkey_only'`, user_id); err != nil { return false, err } if _, err = tx.Exec(ctx, `INSERT INTO federated_identities (user_id, service, remote_username) VALUES ($1, $2, $3)`, user_id, service, remote_username); err != nil { return false, err } if err = tx.Commit(ctx); err != nil { return false, err } return true, nil }
#!/bin/sh
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-FileContributor: Runxi Yu <https://runxiyu.org>
golangci-lint run . --enable-all --disable wsl,wrapcheck,nlreturn,nonamedreturns,mnd,lll,intrange,godox,gochecknoglobals,gochecknoinits,forcetypeassert,gofmt,gofumpt,revive,stylecheck,exhaustruct,godot,unparam,err113,depguard
#!/bin/sh
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-FileContributor: Runxi Yu <https://runxiyu.org>
set -eux go get -t -u go mod tidy go get github.com/go-git/go-git/v5@main
-- SPDX-License-Identifier: AGPL-3.0-only -- SPDX-FileContributor: Runxi Yu <https://runxiyu.org>
DROP SCHEMA public CASCADE; CREATE SCHEMA public;
-- SPDX-License-Identifier: AGPL-3.0-only -- SPDX-FileContributor: Runxi Yu <https://runxiyu.org>
WITH parent_group AS ( INSERT INTO groups (name, description) VALUES ('lindenii', 'The Lindenii Project') RETURNING id ), child_group AS ( INSERT INTO groups (name, description, parent_group) SELECT 'forge', 'Lindenii Forge', id FROM parent_group RETURNING id ), create_repos AS ( INSERT INTO repos (name, group_id, contrib_requirements, filesystem_path) SELECT 'server', id, 'public', '/home/runxiyu/Lindenii/forge/server/.git' FROM child_group ), new_user AS ( INSERT INTO users (username, type, password) VALUES ('test', 'registered', '$argon2id$v=19$m=4096,t=3,p=1$YWFhYWFhYWFhYWFh$i40k7TPFHqXRH4eQOAYGH3LvzwQ38jqqlfap9Rtiy3c') RETURNING id ), new_ssh AS ( INSERT INTO ssh_public_keys (key_string, user_id) SELECT 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAuavKDhEM1L6CufIecy2P712gp151CqZuwSYahTWvmq', id FROM new_user RETURNING user_id ) INSERT INTO user_group_roles (group_id, user_id) SELECT child_group.id, new_ssh.user_id FROM child_group, new_ssh; SELECT * FROM groups; SELECT * FROM repos; SELECT * FROM users; SELECT * FROM ssh_public_keys; SELECT * FROM user_group_roles;