rest-server/variables.go

69 lines
1.4 KiB
Go
Raw Normal View History

2015-08-14 23:04:00 +02:00
package main
import (
"errors"
"regexp"
"strings"
"github.com/restic/restic/backend"
)
// Returns the repository name for a given path
func RepositoryName(u string) (string, error) {
s := strings.Split(u, "/")
if len(s) <= 1 {
return "", errors.New("path does not contain repository name")
}
return ParseRepositoryName(s[1])
}
func ParseRepositoryName(n string) (string, error) {
if len(n) < 1 {
return "", errors.New("repository name should contain at least 1 character")
}
match, err := regexp.MatchString("^[a-zA-Z0-9_-]*$", n)
if !match || err != nil {
return "", errors.New("repository name should not contains special characters")
}
return n, nil
}
// Returns the backend type for a given path
func BackendType(u string) backend.Type {
s := strings.Split(u, "/")
var bt backend.Type
if len(s) > 2 {
2015-08-25 11:35:49 +02:00
bt = parseBackendType(s[2])
2015-08-14 23:04:00 +02:00
}
return bt
}
2015-08-25 11:35:49 +02:00
func parseBackendType(u string) backend.Type {
switch u {
case string(backend.Config):
return backend.Config
case string(backend.Data):
return backend.Data
case string(backend.Snapshot):
return backend.Snapshot
case string(backend.Key):
return backend.Key
case string(backend.Index):
return backend.Index
case string(backend.Lock):
return backend.Lock
default:
return ""
}
}
2015-08-14 23:04:00 +02:00
// Returns the blob ID for a given path
func BlobID(u string) backend.ID {
s := strings.Split(u, "/")
var id backend.ID
if len(s) > 3 {
id, _ = backend.ParseID(s[3])
}
return id
}