// base64url provides base64url encoding/decoding functions
package base64

import (
	"encoding/base64"
	"strings"
)

// decodes base64url string to bytes
func DecodeURL(data string) ([]byte, error) {
	data = strings.Replace(data, "-", "+", -1)
	data = strings.Replace(data, "_", "/", -1)

	switch len(data) % 4 {
	case 0:
	case 2:
		data += "=="
	case 3:
		data += "="
	}

	return base64.StdEncoding.DecodeString(data)
}

// encodes given bytes to base64url string
func EncodeURL(data []byte) string {
	result := base64.StdEncoding.EncodeToString(data)
	result = strings.Replace(result, "+", "-", -1)
	result = strings.Replace(result, "/", "_", -1)
	result = strings.Replace(result, "=", "", -1)

	return result
}