---
apiVersion: v1
kind: ConfigMap
metadata:
  name: rsync-configuration
immutable: true
data:
  rsyncd.conf: |
    uid = 0
    gid = 0
    [downloads]
    read only = no
    path = /downloads
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: script
immutable: true
data:
  script.sh: |
    #!/bin/sh
    set -e
    download()
    {
        while [ ! -e /downloads/youtube-dl.txt ]
        do
            sleep 15
        done
        entr -r /downloads/youtube-dl.txt | youtube-dl --batch-file /downloads/youtube-dl.txt
        rm /downloads/youtube-dl.txt
    }
    download
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: youtube-dl-configuration
immutable: true
data:
  youtube-dl.conf: |
    --force-ipv4 --restrict-filenames --output %(title)s.%(ext)s
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: python-http-server
immutable: true
data:
  python-http-server.py: |
    
    #!/usr/bin/env python
    
    """Extend Python's built in HTTP server to save files
    
    curl or wget can be used to send files with options similar to the following
    
      curl -X PUT --upload-file somefile.txt http://localhost:8000
      wget -O- --method=PUT --body-file=somefile.txt http://localhost:8000/somefile.txt
    
    __Note__: curl automatically appends the filename onto the end of the URL so
    the path can be omitted.
    
    Windows upload & download
    
        powershell -ep bypass -c "$wc=New-Object Net.WebClient;$wc.UploadFile('http://target.com/upload.bin', 'PUT', 'c:\\upload.bin');"
    
        powershell -ep bypass -c "$wc=New-Object Net.WebClient;$wc.DownloadFile('http://target.com/download.bin','c:\\download.bin');"
    
    
    Linux upload & download
    
        curl -X PUT --upload-file upload.bin http://target.com/upload.bin
        wget -O- --method=PUT --body-file=upload.bin http://target.com/upload.bin
    
        wget http://target.com/download.bin -O /tmp/download.bin
        curl http://target.com/download.bin -o /tmp/download.bin
    
    """
    import os
    try:
        import http.server as server
    except ImportError:
        # Handle Python 2.x
        import SimpleHTTPServer as server
    
    class HTTPRequestHandler(server.SimpleHTTPRequestHandler):
        """Extend SimpleHTTPRequestHandler to handle PUT requests"""
        def do_PUT(self):
            """Save a file following a HTTP PUT request"""
            filename = os.path.basename(self.path)
    
            # Don't overwrite files
            if os.path.exists(filename):
                self.send_response(409, 'Conflict')
                self.end_headers()
                reply_body = '"%s" already exists\n' % filename
                self.wfile.write(reply_body.encode('utf-8'))
                return
    
            file_length = int(self.headers['Content-Length'])
            read = 0
            with open(filename, 'wb+') as output_file:
                while read < file_length:
                    new_read = self.rfile.read(min(66556, file_length - read))
                    read += len(new_read)
                    output_file.write(new_read)
            self.send_response(201, 'Created')
            self.end_headers()
            reply_body = 'Saved "%s"\n' % filename
            self.wfile.write(reply_body.encode('utf-8'))
        
        def do_GET(self):
            self.send_response(404, 'Not Found')
            self.end_headers()
            self.wfile.write(b'')
    
    
    if __name__ == '__main__':
        server.test(HandlerClass=HTTPRequestHandler)
