Skip to content

Commit

Permalink
Merge pull request #99 from root-gg/1.0.1
Browse files Browse the repository at this point in the history
Version 1.0.1
  • Loading branch information
Charles-Antoine Mathieu committed Sep 14, 2015
2 parents 1ebb308 + accb6c3 commit d93a431
Show file tree
Hide file tree
Showing 9 changed files with 127 additions and 33 deletions.
30 changes: 30 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#####
####
### Plik - Docker file
##
#

# Let's start with a fresh debian jessie
FROM debian:jessie

# Some generic informations
MAINTAINER Charles-Antoine Mathieu
MAINTAINER Mathieu Bodjikian

# Create user
RUN useradd -U -d /home/plik -m -s /bin/false plik

# Expose the plik port
EXPOSE 8080

# Copy plik
ADD server /home/plik/server/
ADD clients /home/plik/clients/
RUN chown -R plik:plik /home/plik
RUN chmod +x /home/plik/server/plikd

# Launch it
USER plik
WORKDIR /home/plik/server
CMD ./plikd

56 changes: 36 additions & 20 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@
RELEASE_VERSION=`cat VERSION`
RELEASE_DIR="release/plik-$(RELEASE_VERSION)"

all: clean deps server client
GOHOSTOS=`go env GOHOSTOS`
GOHOSTARCH=`go env GOHOSTARCH`

all: clean deps frontend server client

###
# Install npm build dependencies
Expand All @@ -36,13 +39,19 @@ all: clean deps server client
deps:
@cd server/public && npm install


###
# Build frontend ressources
###
frontend:
@if [ ! -d server/public/bower_components ]; then cd server/public && bower install --allow-root ; fi ;
@if [ ! -d server/public/public ]; then cd server/public && grunt ; fi ;


###
# Build plik server for the current architecture
###
server:
@cd server/public && bower install --allow-root
@cd server/public && grunt
@cd server && go get -v
@sed -i -e "s/##VERSION##/$(RELEASE_VERSION)/g" server/common/config.go
@cd server && go build -o plikd ./
@sed -i -e "s/$(RELEASE_VERSION)/##VERSION##/g" server/common/config.go
Expand All @@ -53,24 +62,28 @@ server:
servers:
@cd server/public && bower install --allow-root
@cd server/public && grunt
@cd server && go get -v
@server/build.sh servers

###
# Build plik client for the current architecture
###
client:
@cd client && go get -v
@cd client && go build -o plik ./

###
# Build plik client for all architectures
###
clients:
@cd client && go get -v
@client/build.sh clients
@mkdir -p clients/bash && cp client/plik.sh clients/bash

##
# Build docker
##
docker: release
@cp Dockerfile $(RELEASE_DIR)
@cd $(RELEASE_DIR) && docker build -t plik .

###
# Make server and clients Debian packages
###
Expand All @@ -91,7 +104,7 @@ debs-client: clients
###
# Build release archive
###
release: clean server clients
release: clean frontend server clients
@mkdir -p $(RELEASE_DIR)/server/public

@cp -R clients $(RELEASE_DIR)
Expand All @@ -106,6 +119,8 @@ release: clean server clients
@cp -R server/public/public $(RELEASE_DIR)/server/public
@cp -R server/public/index.html $(RELEASE_DIR)/server/public

@cd release && tar czvf plik-`cat ../VERSION`-$(GOHOSTOS)-$(GOHOSTARCH).tar.gz *


###
# Build release archives for all architectures
Expand All @@ -114,23 +129,23 @@ releases: release servers

@mkdir -p releases

@cp -R servers/linux-amd64/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-linux-64bits.tar.gz *
@cp -R servers/linux-386/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-linux-32bits.tar.gz *
@cp -R servers/linux-arm/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-linux-arm.tar.gz *
@cp -R servers/linux-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-linux-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/linux-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-linux-32bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/linux-arm/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-linux-arm.tar.gz plik-`cat ../VERSION`

@cp -R servers/freebsd-amd64/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-freebsd-64bits.tar.gz *
@cp -R servers/freebsd-386/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-freebsd-32bits.tar.gz *
@cp -R servers/freebsd-arm/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-freebsd-arm.tar.gz *
@cp -R servers/freebsd-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-freebsd-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/freebsd-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-freebsd-32bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/freebsd-arm/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-freebsd-arm.tar.gz plik-`cat ../VERSION`

@cp -R servers/openbsd-amd64/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-openbsd-64bits.tar.gz *
@cp -R servers/openbsd-386/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-openbsd-32bits.tar.gz *
@cp -R servers/openbsd-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-openbsd-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/openbsd-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-openbsd-32bits.tar.gz plik-`cat ../VERSION`

@rm $(RELEASE_DIR)/server/plikd
@cp -R servers/windows-amd64/plikd.exe $(RELEASE_DIR)/server && cd release && zip -r ../releases/plik-`cat ../VERSION`-windows-64bits.zip .
@cp -R servers/windows-386/plikd.exe $(RELEASE_DIR)/server && cd release && zip -r ../releases/plik-`cat ../VERSION`-windows-32bits.zip .
@cp -R servers/windows-amd64/plikd.exe $(RELEASE_DIR)/server && cd release && zip -r ../releases/plik-`cat ../VERSION`-windows-64bits.zip plik-`cat ../VERSION`
@cp -R servers/windows-386/plikd.exe $(RELEASE_DIR)/server && cd release && zip -r ../releases/plik-`cat ../VERSION`-windows-32bits.zip plik-`cat ../VERSION`

@cp -R servers/darwin-amd64/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-macos-64bits.tar.gz *
@cp -R servers/darwin-386/plikd $(RELEASE_DIR)/server && cd release && tar cvf ../releases/plik-`cat ../VERSION`-macos-32bits.tar.gz *
@cp -R servers/darwin-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-macos-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/darwin-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-macos-32bits.tar.gz plik-`cat ../VERSION`

@md5sum releases/* > releases/md5sum.txt

Expand All @@ -140,6 +155,7 @@ releases: release servers
###
clean:
@rm -rf server/public/bower_components
@rm -rf server/public/public
@rm -rf server/plikd
@rm -rf client/plik
@rm -rf clients
Expand Down
36 changes: 33 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,12 @@ $ sudo -c "npm install -g bower grunt-cli"
$ sudo -c "client/build.sh env"
```

To build everything :
To build everything and run it :
```sh
$ make server
$ make clients
$ make deps
$ make release
$ cd server
$ ./plikd
```

To make debian packages :
Expand All @@ -80,6 +82,34 @@ To make release archives :
$ make releases
```


### Docker
Plik comes with a simple Dockerfile that allows you to run it in a container.

First, you need to build the docker image :
```sh
$ make docker
```

Then you can run an instance and map the local port 80 to the plik port :
```sh
$ docker run -t -d -p 80:8080 plik
ab9b2c99da1f3e309cd3b12392b9084b5cafcca0325d7d47ff76f5b1e475d1b9
```

You can also use a volume to store uploads on a local folder.
Here, we map local folder /data to the /home/plik/server/files folder of the container (this is the default uploads directory) :
```sh
$ docker run -t -d -p 80:8080 -v /data:/home/plik/server/files plik
ab9b2c99da1f3e309cd3b12392b9084b5cafcca0325d7d47ff76f5b1e475d1b9
```

To use a different config file, you can also map a single file to the container at runtime :
```sh
$ docker run -t -d -p 80:8080 -v plikd.cfg:/home/plik/server/plikd.cfg plik
ab9b2c99da1f3e309cd3b12392b9084b5cafcca0325d7d47ff76f5b1e475d1b9
```

### API
Plik server expose a REST-full API to manage uploads and get files :

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0
1.0.1
11 changes: 9 additions & 2 deletions client/crypto/pgp/pgp.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,15 @@ func (pb *Backend) Configure(arguments map[string]interface{}) (err error) {

// Encrypt implementation for PGP Crypto Backend
func (pb *Backend) Encrypt(reader io.Reader, writer io.Writer) (err error) {
w, _ := armor.Encode(writer, "PGP MESSAGE", nil)
plaintext, _ := openpgp.Encrypt(w, []*openpgp.Entity{pb.Config.Entity}, nil, &openpgp.FileHints{IsBinary: true}, nil)
w, err := armor.Encode(writer, "PGP MESSAGE", nil)
if err != nil {
return (err)
}

plaintext, err := openpgp.Encrypt(w, []*openpgp.Entity{pb.Config.Entity}, nil, &openpgp.FileHints{IsBinary: true}, nil)
if err != nil {
return (err)
}

_, err = io.Copy(plaintext, reader)
if err != nil {
Expand Down
15 changes: 13 additions & 2 deletions client/plik.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,11 @@ Options:
}
config.Debug("Got upload info : " + config.Sdump(uploadInfo))

// Mon, 02 Jan 2006 15:04:05 MST
creationDate := time.Unix(uploadInfo.Creation, 0).Format(time.RFC1123)

// Display upload url
printf("Upload successfully created : \n")
printf("Upload successfully created at %s : \n", creationDate)
printf(" %s/#/?id=%s\n\n", config.Config.URL, uploadInfo.ID)

// Match file id from server using client reference
Expand Down Expand Up @@ -432,8 +435,16 @@ func getFileURL(upload *common.Upload, file *common.File) (fileURL string) {
if upload.Stream {
mode = "stream"
}

fileURL += fmt.Sprintf("%s/%s/%s/%s/%s", config.Config.URL, mode, upload.ID, file.ID, file.Name)
return

// Parse to get a nice escaped url
u, err := url.Parse(fileURL)
if err != nil {
return ""
}

return u.String()
}

func updateClient(forceUpdate bool) (err error) {
Expand Down
6 changes: 3 additions & 3 deletions server/common/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ type Configuration struct {
LogLevel string
ListenAddress string
ListenPort int
MaxFileSize int
MaxFileSize int64

DefaultTTL int
MaxTTL int
Expand Down Expand Up @@ -92,7 +92,7 @@ func NewConfiguration() (this *Configuration) {
this.ListenPort = 8080
this.DataBackend = "file"
this.MetadataBackend = "file"
this.MaxFileSize = 1048576 // 1MB
this.MaxFileSize = 10737418240 // 10GB
this.DefaultTTL = 2592000 // 30 days
this.MaxTTL = 0
this.SslEnabled = false
Expand All @@ -108,7 +108,7 @@ func NewConfiguration() (this *Configuration) {
func LoadConfiguration(file string) {
Config = NewConfiguration()
if _, err := toml.DecodeFile(file, Config); err != nil {
Log().Warningf("Unable to load config file %s : %s", file, err)
Log().Fatalf("Unable to load config file %s : %s", file, err)
}
Log().SetMinLevelFromString(Config.LogLevel)
Log().Dump(logger.DEBUG, Config)
Expand Down
2 changes: 1 addition & 1 deletion server/plik.go
Original file line number Diff line number Diff line change
Expand Up @@ -677,7 +677,7 @@ func addFileHandler(resp http.ResponseWriter, req *http.Request) {
md5Hash.Write(buf[:bytesRead])

// Check upload max size limit
if totalBytes > common.Config.MaxFileSize {
if int64(totalBytes) > common.Config.MaxFileSize {
err = ctx.EWarningf("File too big (limit is set to %d bytes)", common.Config.MaxFileSize)
preprocessWriter.CloseWithError(err)
return
Expand Down
2 changes: 1 addition & 1 deletion server/plikd.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
LogLevel = "INFO" # Other levels : DEBUG, WARNING, CRITICAL, FATAL
ListenPort = 8080
ListenAddress = "0.0.0.0"
MaxFileSize = 1073741824 # 1GB
MaxFileSize = 10737418240 # 10GB

DefaultTTL = 2592000 # 30 days
MaxTTL = 2592000 # 0 => No limit
Expand Down

0 comments on commit d93a431

Please sign in to comment.