use within.website
This commit is contained in:
parent
0c68ed5f58
commit
cde46077a1
12
README.md
12
README.md
|
@ -3,8 +3,8 @@
|
||||||
[![Build Status](https://cloud.drone.io/api/badges/prologic/go-gopher/status.svg)](https://cloud.drone.io/prologic/go-gopher)
|
[![Build Status](https://cloud.drone.io/api/badges/prologic/go-gopher/status.svg)](https://cloud.drone.io/prologic/go-gopher)
|
||||||
[![CodeCov](https://codecov.io/gh/prologic/go-gopher/branch/master/graph/badge.svg)](https://codecov.io/gh/prologic/go-gopher)
|
[![CodeCov](https://codecov.io/gh/prologic/go-gopher/branch/master/graph/badge.svg)](https://codecov.io/gh/prologic/go-gopher)
|
||||||
[![Go Report Card](https://goreportcard.com/badge/prologic/go-gopher)](https://goreportcard.com/report/prologic/go-gopher)
|
[![Go Report Card](https://goreportcard.com/badge/prologic/go-gopher)](https://goreportcard.com/report/prologic/go-gopher)
|
||||||
[![GoDoc](https://godoc.org/github.com/prologic/go-gopher?status.svg)](https://godoc.org/github.com/prologic/go-gopher)
|
[![GoDoc](https://godoc.org/within.website/gopher?status.svg)](https://godoc.org/within.website/gopher)
|
||||||
[![Sourcegraph](https://sourcegraph.com/github.com/prologic/go-gopher/-/badge.svg)](https://sourcegraph.com/github.com/prologic/go-gopher?badge)
|
[![Sourcegraph](https://sourcegraph.com/within.website/gopher/-/badge.svg)](https://sourcegraph.com/within.website/gopher?badge)
|
||||||
|
|
||||||
This is a standards compliant Gopher library for the Go programming language
|
This is a standards compliant Gopher library for the Go programming language
|
||||||
implementing the RFC 1436 specification. The library includes both client and
|
implementing the RFC 1436 specification. The library includes both client and
|
||||||
|
@ -13,13 +13,13 @@ server handling and examples of each.
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```#!bash
|
```#!bash
|
||||||
$ go get github.com/prologic/go-gopher
|
$ go get within.website/gopher
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```#!go
|
```#!go
|
||||||
import "github.com/prologic/go-gopher"
|
import "within.website/gopher"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
@ -32,7 +32,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/prologic/go-gopher"
|
"within.website/gopher"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -50,7 +50,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/prologic/go-gopher"
|
"within.website/gopher"
|
||||||
)
|
)
|
||||||
|
|
||||||
func hello(w gopher.ResponseWriter, r *gopher.Request) {
|
func hello(w gopher.ResponseWriter, r *gopher.Request) {
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
theme: jekyll-theme-hacker
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/prologic/go-gopher"
|
"within.website/gopher"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/prologic/go-gopher"
|
"within.website/gopher"
|
||||||
)
|
)
|
||||||
|
|
||||||
func cwd() string {
|
func cwd() string {
|
||||||
|
|
Binary file not shown.
|
@ -4,7 +4,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/prologic/go-gopher"
|
"within.website/gopher"
|
||||||
)
|
)
|
||||||
|
|
||||||
func index(w gopher.ResponseWriter, r *gopher.Request) {
|
func index(w gopher.ResponseWriter, r *gopher.Request) {
|
||||||
|
|
1
go.mod
1
go.mod
|
@ -5,4 +5,5 @@ require (
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/stretchr/testify v1.2.2
|
github.com/stretchr/testify v1.2.2
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3
|
golang.org/x/net v0.0.0-20181220203305-927f97764cc3
|
||||||
|
within.website/ln v0.6.0
|
||||||
)
|
)
|
||||||
|
|
5
go.sum
5
go.sum
|
@ -1,8 +1,13 @@
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
|
||||||
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
|
golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis=
|
golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis=
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
within.website/ln v0.6.0 h1:zn8vE9f0biSTNIpHFc7kOPH+SitLsWrU1MfrwMSS4cM=
|
||||||
|
within.website/ln v0.6.0/go.mod h1:ifURKqsCJekcsdUE+hyCdcuhQqQ+9v9DfA++ZqYxZFE=
|
||||||
|
|
57
gopher.go
57
gopher.go
|
@ -10,6 +10,7 @@ package gopher
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
@ -27,8 +28,6 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Item Types
|
// Item Types
|
||||||
|
@ -210,27 +209,8 @@ func ParseItem(line string) (item *Item, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON serializes an Item into a JSON structure
|
|
||||||
func (i *Item) MarshalJSON() ([]byte, error) {
|
|
||||||
return json.Marshal(struct {
|
|
||||||
Type string `json:"type"`
|
|
||||||
Description string `json:"description"`
|
|
||||||
Selector string `json:"selector"`
|
|
||||||
Host string `json:"host"`
|
|
||||||
Port int `json:"port"`
|
|
||||||
Extras []string `json:"extras"`
|
|
||||||
}{
|
|
||||||
Type: string(i.Type),
|
|
||||||
Description: i.Description,
|
|
||||||
Selector: i.Selector,
|
|
||||||
Host: i.Host,
|
|
||||||
Port: i.Port,
|
|
||||||
Extras: i.Extras,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarshalText serializes an Item into an array of bytes
|
// MarshalText serializes an Item into an array of bytes
|
||||||
func (i *Item) MarshalText() ([]byte, error) {
|
func (i Item) MarshalText() ([]byte, error) {
|
||||||
b := []byte{}
|
b := []byte{}
|
||||||
b = append(b, byte(i.Type))
|
b = append(b, byte(i.Type))
|
||||||
b = append(b, []byte(i.Description)...)
|
b = append(b, []byte(i.Description)...)
|
||||||
|
@ -251,7 +231,7 @@ func (i *Item) MarshalText() ([]byte, error) {
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Item) isDirectoryLike() bool {
|
func (i Item) isDirectoryLike() bool {
|
||||||
switch i.Type {
|
switch i.Type {
|
||||||
case DIRECTORY:
|
case DIRECTORY:
|
||||||
return true
|
return true
|
||||||
|
@ -264,7 +244,7 @@ func (i *Item) isDirectoryLike() bool {
|
||||||
|
|
||||||
// Directory representes a Gopher Menu of Items
|
// Directory representes a Gopher Menu of Items
|
||||||
type Directory struct {
|
type Directory struct {
|
||||||
Items []*Item `json:"items"`
|
Items []Item `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToJSON returns the Directory as JSON bytes
|
// ToJSON returns the Directory as JSON bytes
|
||||||
|
@ -409,7 +389,7 @@ func (i *Item) FetchDirectory() (Directory, error) {
|
||||||
scanner := bufio.NewScanner(reader)
|
scanner := bufio.NewScanner(reader)
|
||||||
scanner.Split(bufio.ScanLines)
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
var items []*Item
|
var items []Item
|
||||||
|
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
line := strings.Trim(scanner.Text(), "\r\n")
|
line := strings.Trim(scanner.Text(), "\r\n")
|
||||||
|
@ -427,7 +407,7 @@ func (i *Item) FetchDirectory() (Directory, error) {
|
||||||
log.Printf("Error parsing %q: %q", line, err)
|
log.Printf("Error parsing %q: %q", line, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
items = append(items, item)
|
items = append(items, *item)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Directory{items}, nil
|
return Directory{items}, nil
|
||||||
|
@ -554,16 +534,9 @@ func GetItemType(p string) ItemType {
|
||||||
// Server defines parameters for running a Gopher server.
|
// Server defines parameters for running a Gopher server.
|
||||||
// A zero value for Server is valid configuration.
|
// A zero value for Server is valid configuration.
|
||||||
type Server struct {
|
type Server struct {
|
||||||
Addr string // TCP address to listen on, ":gopher" if empty
|
Addr string // TCP address to listen on, ":gopher" if empty
|
||||||
Handler Handler // handler to invoke, gopher.DefaultServeMux if nil
|
Handler Handler // handler to invoke, gopher.DefaultServeMux if nil
|
||||||
|
Hostname string // FQDN Hostname to reach this server on
|
||||||
Hostname string // FQDN Hostname to reach this server on
|
|
||||||
|
|
||||||
// ErrorLog specifies an optional logger for errors accepting
|
|
||||||
// connections and unexpected behavior from handlers.
|
|
||||||
// If nil, logging goes to os.Stderr via the log package's
|
|
||||||
// standard logger.
|
|
||||||
ErrorLog *log.Logger
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// serverHandler delegates to either the server's Handler or
|
// serverHandler delegates to either the server's Handler or
|
||||||
|
@ -646,7 +619,7 @@ func (s *Server) Serve(l net.Listener) error {
|
||||||
for {
|
for {
|
||||||
rw, err := l.Accept()
|
rw, err := l.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("error acceptig new client: %s", err)
|
fmt.Errorf("error accepting new client: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -778,14 +751,6 @@ func (c *conn) readRequest(ctx context.Context) (w *response, err error) {
|
||||||
return w, nil
|
return w, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) logf(format string, args ...interface{}) {
|
|
||||||
if s.ErrorLog != nil {
|
|
||||||
s.ErrorLog.Printf(format, args...)
|
|
||||||
} else {
|
|
||||||
log.Printf(format, args...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ListenAndServe listens on the TCP network address addr
|
// ListenAndServe listens on the TCP network address addr
|
||||||
// and then calls Serve with handler to handle requests
|
// and then calls Serve with handler to handle requests
|
||||||
// on incoming connections.
|
// on incoming connections.
|
||||||
|
@ -798,7 +763,7 @@ func (s *Server) logf(format string, args ...interface{}) {
|
||||||
// "io"
|
// "io"
|
||||||
// "log"
|
// "log"
|
||||||
//
|
//
|
||||||
// "github.com/prologic/go-gopher"
|
// "within.website/gopher"
|
||||||
// )
|
// )
|
||||||
//
|
//
|
||||||
// // hello world, the gopher server
|
// // hello world, the gopher server
|
||||||
|
|
Loading…
Reference in New Issue