mirror of
https://github.com/rwinkhart/libmutton.git
synced 2026-08-31 22:36:41 -04:00
Improve StringGen to allow creating file name-safe complex strings; remove in-code references to future additions
This commit is contained in:
@@ -11,8 +11,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const extendedCharset = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
|
|
||||||
|
|
||||||
// TargetIsFile TargetStatusCheck checks if the targetLocation is a file, directory, or is inaccessible
|
// TargetIsFile TargetStatusCheck checks if the targetLocation is a file, directory, or is inaccessible
|
||||||
// failCondition: 0 = fail on inaccessible, 1 = fail on inaccessible/file, 2 = fail on inaccessible/directory
|
// failCondition: 0 = fail on inaccessible, 1 = fail on inaccessible/file, 2 = fail on inaccessible/directory
|
||||||
// returns: isFile, isAccessible
|
// returns: isFile, isAccessible
|
||||||
@@ -88,15 +86,24 @@ func RemoveTrailingEmptyStrings(slice []string) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StringGen generates a random string of a specified length and complexity
|
// StringGen generates a random string of a specified length and complexity
|
||||||
|
// safeForFileName: if true, the generated string will only contain special characters that are safe for file names (only impacts complex strings)
|
||||||
// complexity: minimum percentage of special characters to be returned in the generated string (only impacts complex strings)
|
// complexity: minimum percentage of special characters to be returned in the generated string (only impacts complex strings)
|
||||||
func StringGen(length int, complex bool, complexity float64) string {
|
func StringGen(length int, complex bool, complexity float64, safeForFileName bool) string {
|
||||||
var actualSpecialChars int // track the number of special characters in the generated string
|
var actualSpecialChars int // track the number of special characters in the generated string
|
||||||
var minSpecialChars int // track the minimum number of special characters to accept
|
var minSpecialChars int // track the minimum number of special characters to accept
|
||||||
|
var extendedCharset string // additions to character set used for complex strings
|
||||||
|
|
||||||
charset := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" // default character set used for all strings
|
charset := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" // default character set used for all strings
|
||||||
|
const extendedCharsetFiles = "!#$%&'()+,-.;=@[]^_`{}~" // additional special characters for complex strings (safe in file names)
|
||||||
|
const extendedCharsetPassword = "\"*:><?/\\|" // additional special characters for complex strings (NOT safe in file names)
|
||||||
if complex {
|
if complex {
|
||||||
minSpecialChars = int(math.Round(float64(length) * complexity)) // determine minimum number of special characters to accept
|
minSpecialChars = int(math.Round(float64(length) * complexity)) // determine minimum number of special characters to accept
|
||||||
charset = charset + extendedCharset
|
if !safeForFileName {
|
||||||
|
extendedCharset = extendedCharsetFiles + extendedCharsetPassword
|
||||||
|
} else {
|
||||||
|
extendedCharset = extendedCharsetFiles
|
||||||
|
}
|
||||||
|
charset += extendedCharset
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop until a string of the desired complexity is generated
|
// loop until a string of the desired complexity is generated
|
||||||
|
|||||||
+3
-2
@@ -2,12 +2,13 @@ package sync
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/rwinkhart/MUTN/src/backend"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/rwinkhart/MUTN/src/backend"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DeviceIDGen generates a new client device ID and registers it with the server
|
// DeviceIDGen generates a new client device ID and registers it with the server
|
||||||
@@ -16,7 +17,7 @@ import (
|
|||||||
// returns the remote EntryRoot and OS type (OS type is a bool: backend.IsWindows)
|
// returns the remote EntryRoot and OS type (OS type is a bool: backend.IsWindows)
|
||||||
func DeviceIDGen() (string, string) {
|
func DeviceIDGen() (string, string) {
|
||||||
deviceIDPrefix, _ := os.Hostname()
|
deviceIDPrefix, _ := os.Hostname()
|
||||||
deviceIDSuffix := backend.StringGen(rand.Intn(32)+48, false, 0) + "-" + strconv.FormatInt(time.Now().Unix(), 10) // TODO consider using complex string generator and removing unsafe characters manually
|
deviceIDSuffix := backend.StringGen(rand.Intn(32)+48, true, 0.2, true) + "-" + strconv.FormatInt(time.Now().Unix(), 10)
|
||||||
deviceID := deviceIDPrefix + "-" + deviceIDSuffix
|
deviceID := deviceIDPrefix + "-" + deviceIDSuffix
|
||||||
_, err := os.Create(backend.ConfigDir + backend.PathSeparator + "devices" + backend.PathSeparator + deviceID) // TODO remove existing device ID file if it exists (from both client and server)
|
_, err := os.Create(backend.ConfigDir + backend.PathSeparator + "devices" + backend.PathSeparator + deviceID) // TODO remove existing device ID file if it exists (from both client and server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user