datawareforge/cmd/keys.go

84 lines
2.2 KiB
Go
Raw Permalink Normal View History

2018-11-01 13:41:07 +00:00
// Copyright 2018 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2018-11-01 13:41:07 +00:00
package cmd
import (
"errors"
"fmt"
"strings"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/private"
2018-11-01 13:41:07 +00:00
"github.com/urfave/cli/v2"
2018-11-01 13:41:07 +00:00
)
// CmdKeys represents the available keys sub-command
var CmdKeys = &cli.Command{
Name: "keys",
Usage: "(internal) Should only be called by SSH server",
feat(white-label): Atualização de referências para DATAWARE Forge / Update branding references to DATAWARE Forge **[PT-BR]** - Atualiza o Makefile para alterar mensagens de requisitos de Go, Git LFS e Node.js, substituindo "Forgejo" por "DATAWARE Forge". - Modifica scripts e comandos (ex.: merge de locales, ações, certificados, documentação e CLI) para refletir a nova identidade, mudando nomes e descrições de "Forgejo" para "DATAWARE Forge". - Altera mensagens de log, headers, textos de erro e avisos em vários módulos (actions, hooks, keys, doctor, web, etc.) para garantir consistência com a marca DATAWARE. - Atualiza templates e arquivos de configuração (ex.: app.example.ini, init scripts, etc.) para usar "DATAWARE Forge" em textos, placeholders e URLs. - Ajusta testes e mensagens em módulos de autenticação, webhook, indexador, banco de dados e outros, substituindo referências a "Forgejo" por "DATAWARE Forge". Estas alterações consolidam o rebranding white-label para DATAWARE Forge, mantendo a integridade do código original e preparando o sistema para uso interno e posterior distribuição. **[EN]** - Updated the Makefile to change messages regarding Go, Git LFS, and Node.js requirements, replacing "Forgejo" with "DATAWARE Forge". - Modified scripts and commands (e.g., locale merge, actions, certificate generation, documentation, and CLI) to reflect the new identity by renaming and updating descriptions from "Forgejo" to "DATAWARE Forge". - Changed log messages, headers, error texts, and warnings in various modules (actions, hooks, keys, doctor, web, etc.) to ensure consistency with the DATAWARE brand. - Updated templates and configuration files (e.g., app.example.ini, init scripts, etc.) to use "DATAWARE Forge" in texts, placeholders, and URLs. - Adjusted tests and messages in modules for authentication, webhooks, indexing, database, and others, replacing references from "Forgejo" to "DATAWARE Forge". These changes consolidate the white-label rebranding for DATAWARE Forge, preserving the original code integrity while preparing the system for internal use and future distribution. Marcos A. Lucas <mlucas@dataware.com.br>
2025-03-09 07:22:26 -03:00
Description: "Queries the DATAWARE Forge database to get the authorized command for a given ssh key fingerprint",
Before: PrepareConsoleLoggerLevel(log.FATAL),
Action: runKeys,
2018-11-01 13:41:07 +00:00
Flags: []cli.Flag{
&cli.StringFlag{
Name: "expected",
Aliases: []string{"e"},
Value: "git",
Usage: "Expected user for whom provide key commands",
2018-11-01 13:41:07 +00:00
},
&cli.StringFlag{
Name: "username",
Aliases: []string{"u"},
Value: "",
Usage: "Username trying to log in by SSH",
2018-11-01 13:41:07 +00:00
},
&cli.StringFlag{
Name: "type",
Aliases: []string{"t"},
Value: "",
Usage: "Type of the SSH key provided to the SSH Server (requires content to be provided too)",
2018-11-01 13:41:07 +00:00
},
&cli.StringFlag{
Name: "content",
Aliases: []string{"k"},
Value: "",
Usage: "Base64 encoded content of the SSH key provided to the SSH Server (requires type to be provided too)",
2018-11-01 13:41:07 +00:00
},
},
}
func runKeys(c *cli.Context) error {
if !c.IsSet("username") {
return errors.New("No username provided")
}
// Check username matches the expected username
if strings.TrimSpace(c.String("username")) != strings.TrimSpace(c.String("expected")) {
return nil
}
content := ""
if c.IsSet("type") && c.IsSet("content") {
content = fmt.Sprintf("%s %s", strings.TrimSpace(c.String("type")), strings.TrimSpace(c.String("content")))
}
if content == "" {
return errors.New("No key type and content provided")
}
ctx, cancel := installSignals()
defer cancel()
setup(ctx, c.Bool("debug"))
2018-11-01 13:41:07 +00:00
Refactor internal API for git commands, use meaningful messages instead of "Internal Server Error" (#23687) # Why this PR comes At first, I'd like to help users like #23636 (there are a lot) The unclear "Internal Server Error" is quite anonying, scare users, frustrate contributors, nobody knows what happens. So, it's always good to provide meaningful messages to end users (of course, do not leak sensitive information). When I started working on the "response message to end users", I found that the related code has a lot of technical debt. A lot of copy&paste code, unclear fields and usages. So I think it's good to make everything clear. # Tech Backgrounds Gitea has many sub-commands, some are used by admins, some are used by SSH servers or Git Hooks. Many sub-commands use "internal API" to communicate with Gitea web server. Before, Gitea server always use `StatusCode + Json "err" field` to return messages. * The CLI sub-commands: they expect to show all error related messages to site admin * The Serv/Hook sub-commands (for git clients): they could only show safe messages to end users, the error log could only be recorded by "SSHLog" to Gitea web server. In the old design, it assumes that: * If the StatusCode is 500 (in some functions), then the "err" field is error log, shouldn't be exposed to git client. * If the StatusCode is 40x, then the "err" field could be exposed. And some functions always read the "err" no matter what the StatusCode is. The old code is not strict, and it's difficult to distinguish the messages clearly and then output them correctly. # This PR To help to remove duplicate code and make everything clear, this PR introduces `ResponseExtra` and `requestJSONResp`. * `ResponseExtra` is a struct which contains "extra" information of a internal API response, including StatusCode, UserMsg, Error * `requestJSONResp` is a generic function which can be used for all cases to help to simplify the calls. * Remove all `map["err"]`, always use `private.Response{Err}` to construct error messages. * User messages and error messages are separated clearly, the `fail` and `handleCliResponseExtra` will output correct messages. * Replace all `Internal Server Error` messages with meaningful (still safe) messages. This PR saves more than 300 lines, while makes the git client messages more clear. Many gitea-serv/git-hook related essential functions are covered by tests. --------- Co-authored-by: delvh <dev.lh@web.de>
2023-03-29 14:32:26 +08:00
authorizedString, extra := private.AuthorizedPublicKeyByContent(ctx, content)
// do not use handleCliResponseExtra or cli.NewExitError, if it exists immediately, it breaks some tests like Test_CmdKeys
if extra.Error != nil {
return extra.Error
2018-11-01 13:41:07 +00:00
}
_, _ = fmt.Fprintln(c.App.Writer, strings.TrimSpace(authorizedString.Text))
2018-11-01 13:41:07 +00:00
return nil
}