mirror of https://github.com/veonik/eokvin
parent
b648598bba
commit
5abb3b7437
@ -0,0 +1,76 @@
|
||||
package eokvin // import "github.com/veonik/eokvin"
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
type ShortURL struct {
|
||||
url.URL
|
||||
|
||||
Original *url.URL
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
http *http.Client
|
||||
|
||||
Endpoint string
|
||||
Token string
|
||||
}
|
||||
|
||||
func NewClient(token string) *Client {
|
||||
return &Client{
|
||||
http: &http.Client{},
|
||||
Endpoint: "https://eok.vin/new",
|
||||
Token: token,
|
||||
}
|
||||
}
|
||||
|
||||
func NewInsecureClient(token string) *Client {
|
||||
return &Client{
|
||||
http: &http.Client{Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}},
|
||||
Endpoint: "https://localhost:3000/new",
|
||||
Token: token,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Client) NewShortURLString(lu string) (*ShortURL, error) {
|
||||
ou, err := url.Parse(lu)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.NewShortURL(ou)
|
||||
}
|
||||
|
||||
func (c *Client) NewShortURL(ou *url.URL) (*ShortURL, error) {
|
||||
resp, err := c.http.PostForm(
|
||||
c.Endpoint,
|
||||
url.Values{"token": {c.Token}, "url": {ou.String()}})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r := struct {
|
||||
Error string `json:"error"`
|
||||
ShortURL string `json:"short-url"`
|
||||
}{}
|
||||
if err := json.Unmarshal(b, &r); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if r.Error != "" {
|
||||
return nil, errors.New(r.Error)
|
||||
}
|
||||
u, err := url.Parse(r.ShortURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ShortURL{URL: *u, Original: ou}, nil
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"log"
|
||||
|
||||
"github.com/veonik/eokvin"
|
||||
)
|
||||
|
||||
var token string
|
||||
var endpoint string
|
||||
var insecure bool
|
||||
|
||||
func main() {
|
||||
flag.StringVar(&token, "token", "", "Secret token, required")
|
||||
flag.StringVar(&endpoint, "endpoint", "https://eok.vin/new", "URL for the running eokvin server")
|
||||
flag.BoolVar(&insecure, "insecure", false,"If enabled, allows endpoint to be insecure")
|
||||
flag.Parse()
|
||||
|
||||
if token == "" {
|
||||
log.Fatal("token cannot be blank")
|
||||
}
|
||||
if endpoint == "" {
|
||||
log.Fatal("endpoint cannot be blank")
|
||||
}
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) != 1 {
|
||||
log.Fatalf("expected 1 argument, not %d", len(os.Args))
|
||||
}
|
||||
|
||||
u := args[0]
|
||||
|
||||
var c *eokvin.Client
|
||||
if !insecure {
|
||||
c = eokvin.NewClient(token)
|
||||
} else {
|
||||
c = eokvin.NewInsecureClient(token)
|
||||
}
|
||||
c.Endpoint = endpoint
|
||||
s, err := c.NewShortURLString(u)
|
||||
if err != nil {
|
||||
log.Fatalf("error creating short URL: %s", err.Error())
|
||||
}
|
||||
fmt.Println(s.String())
|
||||
}
|
Loading…
Reference in new issue