# Architecture | package | description | depends on | |--|--|--| | main.go | init app in cmd/* | cmd, server/version | | cmd | start app, read config from args and env vars, validate args | server/{cache,certificates,gitea,handler}, github.com/urfave/cli | server/cache | create key/value cache based con settings | github.com/OrlovEvgeny/go-mcache | | server/database | create cert database witch persist certs for main and custom domain | github.com/go-acme/lego/v4/{certcrypto,certificate}, xorm.io/xorm | | server/certificates | request, mock, manage certificates via acme | server/{cache,context,database,dns,gitea,utils}, github.com/go-acme/lego/v4/{registration,providers/dns,upstream} | | server/context | smal wrapper for net/http response and requests | server/utils | | server/dns | handle dns lookups for custom domains | server/cache | | server/gitea | handle all gitea-backend calls and it's caching | server/cache, code.gitea.io/sdk/gitea | | server/handler | take all http(s) requests and determine how they need to be threated (default pages, custom domain, ...). it does however not serve stuff | html,server/{cache,context,dns,gitea,upstream,version} | | server/upstream | try to serve stuff based on args from handler | html,server/{cache,context,gitea} | | server/utils | general purpose functions | | | server/version | just store the program version | | ## Concepts Each package creates a client that others can use e.g.: - server/gitea -> GiteaClient - server/certificates -> AcmeClient - ...