move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
// Package keyparser extracts public keys from code.
|
||||
package keyparser
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
rsaBegin = "BEGIN"
|
||||
rsaEnd = "END"
|
||||
rsaSep = "-----"
|
||||
)
|
||||
|
||||
func isBegin(s string) bool {
|
||||
if !strings.Contains(s, rsaSep) {
|
||||
return false
|
||||
}
|
||||
return strings.Contains(s, rsaBegin)
|
||||
}
|
||||
|
||||
func isEnd(s string) bool {
|
||||
if !strings.Contains(s, rsaSep) {
|
||||
return false
|
||||
}
|
||||
return strings.Contains(s, rsaEnd)
|
||||
}
|
||||
|
||||
// cleanHeader cleans out any suffix from header.
|
||||
//
|
||||
// If s is not header, s is returned unchanged.
|
||||
func cleanHeader(s string) string {
|
||||
if !strings.HasPrefix(s, rsaSep) {
|
||||
return s
|
||||
}
|
||||
idx := strings.LastIndex(s, rsaSep)
|
||||
if idx <= 0 {
|
||||
return s
|
||||
}
|
||||
|
||||
return s[:idx+len(rsaSep)]
|
||||
}
|
||||
|
||||
// Extract public keys from C++ code in r to w.
|
||||
func Extract(r io.Reader, w io.Writer) error {
|
||||
s := bufio.NewScanner(r)
|
||||
|
||||
var (
|
||||
parts []string
|
||||
body bool
|
||||
b strings.Builder
|
||||
)
|
||||
|
||||
for s.Scan() {
|
||||
text := strings.TrimSuffix(
|
||||
strings.TrimSpace(s.Text()), `\n\`,
|
||||
)
|
||||
text = strings.Trim(text, `"`)
|
||||
text = strings.TrimSuffix(text, `\n`)
|
||||
|
||||
text = cleanHeader(text)
|
||||
|
||||
if isBegin(text) {
|
||||
// Public key started.
|
||||
body = true
|
||||
}
|
||||
|
||||
if body {
|
||||
parts = append(parts, text)
|
||||
}
|
||||
|
||||
if isEnd(text) {
|
||||
// Public key completed.
|
||||
// Writing single public key to w.
|
||||
for _, part := range parts {
|
||||
b.WriteString(part)
|
||||
b.WriteRune('\n')
|
||||
}
|
||||
if _, err := io.WriteString(w, b.String()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Reset state.
|
||||
b.Reset()
|
||||
body = false
|
||||
parts = parts[:0]
|
||||
}
|
||||
}
|
||||
|
||||
if s.Err() != nil {
|
||||
return s.Err()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user