feat: Add ssh diagnoser

This commit is contained in:
Myzel394 2024-07-30 00:11:22 +02:00
parent 267a0ff604
commit 4d7297e7b9
No known key found for this signature in database
GPG Key ID: DEC4AAB876F73185
3 changed files with 71 additions and 0 deletions

View File

@ -25,3 +25,20 @@ func SendDiagnostics(context *glsp.Context, uri protocol.DocumentUri, diagnostic
)
}
func DiagnoseOption(
context *glsp.Context,
uri protocol.DocumentUri,
parser *SimpleConfigParser,
optionName string,
checkerFunc func (string, SimpleConfigPosition) []protocol.Diagnostic,
) []protocol.Diagnostic {
option, err := parser.GetOption(optionName)
if err != nil {
// Nothing to diagnose
return nil
}
return checkerFunc(option.Value, option.Position)
}

View File

@ -0,0 +1,52 @@
package openssh
import (
"config-lsp/common"
"github.com/tliron/glsp"
protocol "github.com/tliron/glsp/protocol_3_16"
)
func DiagnoseSSHOptions(
context *glsp.Context,
params *protocol.DidChangeTextDocumentParams,
) []protocol.Diagnostic {
diagnostics := make([]protocol.Diagnostic, 0)
diagnostics = append(
diagnostics,
common.DiagnoseOption(
context,
params.TextDocument.URI,
&Parser,
"Port",
func (value string, position common.SimpleConfigPosition) []protocol.Diagnostic {
if (value == "22") {
severity := protocol.DiagnosticSeverityWarning
return []protocol.Diagnostic{
{
Range: protocol.Range{
Start: protocol.Position{
Line: position.Line,
Character: uint32(len("Port ")),
},
End: protocol.Position{
Line: position.Line,
Character: uint32(len("Port " + value)),
},
},
Severity: &severity,
Message: "Port should not be 22 as it's often enumarated by attackers",
},
}
}
return []protocol.Diagnostic{}
},
)...
)
return diagnostics
}

View File

@ -34,6 +34,8 @@ func TextDocumentDidChange(context *glsp.Context, params *protocol.DidChangeText
)...,
)
diagnostics = DiagnoseSSHOptions(context, params)
if len(diagnostics) > 0 {
common.SendDiagnostics(context, params.TextDocument.URI, diagnostics)
} else {