Lindenii Project Forge
Login

server

Lindenii Forge’s main backend daemon
Commit info
ID
6cda7644e983c5c2735bb73a5594a2659e87659a
Author
Runxi Yu <me@runxiyu.org>
Author date
Wed, 13 Aug 2025 11:22:58 +0800
Committer
Runxi Yu <me@runxiyu.org>
Committer date
Wed, 13 Aug 2025 19:48:32 +0800
Actions
Config placement adjustments
package config

import (
	"go.lindenii.runxiyu.org/forge/forged/internal/database"
	"go.lindenii.runxiyu.org/forge/forged/internal/irc"
)

type Config struct {
	HTTP struct {
		Net          string `scfg:"net"`
		Addr         string `scfg:"addr"`
		CookieExpiry int    `scfg:"cookie_expiry"`
		Root         string `scfg:"root"`
		ReadTimeout  uint32 `scfg:"read_timeout"`
		WriteTimeout uint32 `scfg:"write_timeout"`
		IdleTimeout  uint32 `scfg:"idle_timeout"`
		ReverseProxy bool   `scfg:"reverse_proxy"`
	} `scfg:"http"`
	Hooks struct {
		Socket string `scfg:"socket"`
		Execs  string `scfg:"execs"`
	} `scfg:"hooks"`
	LMTP struct {
		Socket       string `scfg:"socket"`
		Domain       string `scfg:"domain"`
		MaxSize      int64  `scfg:"max_size"`
		WriteTimeout uint32 `scfg:"write_timeout"`
		ReadTimeout  uint32 `scfg:"read_timeout"`
	} `scfg:"lmtp"`
	Git struct {
		RepoDir    string `scfg:"repo_dir"`
		Socket     string `scfg:"socket"`
		DaemonPath string `scfg:"daemon_path"`
	} `scfg:"git"`
	SSH struct {
		Net  string `scfg:"net"`
		Addr string `scfg:"addr"`
		Key  string `scfg:"key"`
		Root string `scfg:"root"`
	} `scfg:"ssh"`
	IRC     irc.Config `scfg:"irc"`
	General struct {
		Title string `scfg:"title"`
	} `scfg:"general"`
	DB database.Config `scfg:"db"`
	Pprof struct {
		Net  string `scfg:"net"`
		Addr string `scfg:"addr"`
	} `scfg:"pprof"`
}
// SPDX-License-Identifier: AGPL-3.0-only
// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>

// Package database provides stubs and wrappers for databases.
package database

import (
	"context"

	"github.com/jackc/pgx/v5/pgxpool"
)

// Database is a wrapper around pgxpool.Pool to provide a common interface for
// other packages in the forge.
type Database struct {
	*pgxpool.Pool
}

// Open opens a new database connection pool using the provided connection
// string. It returns a Database instance and an error if any occurs.
// It is run indefinitely in the background.
func Open(connString string) (Database, error) {
	db, err := pgxpool.New(context.Background(), connString)
	return Database{db}, err
}

type Config struct {
	Type string `scfg:"type"`
	Conn string `scfg:"conn"`
}
package hooki

import (
	"go.lindenii.runxiyu.org/forge/forged/internal/cmap"
	"github.com/gliderlabs/ssh"
)

type Pool cmap.Map[string, hookinfo]

type hookinfo struct {
	session      ssh.Session
	pubkey       string
	directAccess bool
	repoPath     string
	userID       int
	userType     string
	repoID       int
	groupPath    []string
	repoName     string
	contribReq   string
}
package server

import (
	"context"
	"fmt"
	"html/template"

	"go.lindenii.runxiyu.org/forge/forged/internal/config"
	"go.lindenii.runxiyu.org/forge/forged/internal/database"
	"go.lindenii.runxiyu.org/forge/forged/internal/hooki"
	"go.lindenii.runxiyu.org/forge/forged/internal/store"
)

type Server struct {
	config config.Config

	database database.Database
	stores *store.Set
	hookis *hooki.Pool
	templates *template.Template
}

func New(ctx context.Context, config config.Config) (*Server, error) {
	database, err := database.Open(ctx, config.DB)	
	if err != nil {
		return nil, fmt.Errorf("open database: %w", err)
	}

	return &Server{
		database: database,
	}, nil
}
package store

type Set struct{} // TODO