# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#   http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

'''
Created on Jul 2, 2012

@author: frank
'''
import sys
import os
import os.path
import base64

HTML_ROOT = "/var/www/html/"

def writeIfNotHere(fileName, texts):
    if not os.path.exists(fileName):
        entries = []
    else:
        f = open(fileName, 'r')
        entries = f.readlines()
        f.close()

    texts = [ "%s\n" % t for t in texts ]
    need = False
    for t in texts:
        if not t in entries:
            entries.append(t)
            need = True
            
    if need: 
        f = open(fileName, 'w')
        f.write(''.join(entries))
        f.close()
    
def createRedirectEntry(vmIp, folder, filename):
    entry = "RewriteRule ^%s$  ../%s/%%{REMOTE_ADDR}/%s [L,NC,QSA]" % (filename, folder, filename)
    htaccessFolder="/var/www/html/latest"
    htaccessFile=os.path.join(htaccessFolder, ".htaccess")
    if not os.path.exists(htaccessFolder):
        os.makedirs(htaccessFolder)
    writeIfNotHere(htaccessFile, ["Options +FollowSymLinks", "RewriteEngine On", entry])
        
    htaccessFolder = os.path.join("/var/www/html/", folder, vmIp)
    if not os.path.exists(htaccessFolder):
        os.makedirs(htaccessFolder)
    htaccessFile=os.path.join(htaccessFolder, ".htaccess")
    entry="Options -Indexes\nOrder Deny,Allow\nDeny from all\nAllow from %s" % vmIp
    f = open(htaccessFile, 'w')
    f.write(entry)
    f.close()
    
    if folder in ['metadata', 'meta-data']:
        entry1="RewriteRule ^meta-data/(.+)$  ../%s/%%{REMOTE_ADDR}/$1 [L,NC,QSA]" % folder
        htaccessFolder="/var/www/html/latest"
        htaccessFile=os.path.join(htaccessFolder, ".htaccess")
        entry2="RewriteRule ^meta-data/$  ../%s/%%{REMOTE_ADDR}/meta-data [L,NC,QSA]" % folder
        writeIfNotHere(htaccessFile, [entry1, entry2])
        

def addUserData(vmIp, folder, fileName, contents):
        
    baseFolder = os.path.join(HTML_ROOT, folder, vmIp)
    if not os.path.exists(baseFolder):
        os.makedirs(baseFolder)
        
    createRedirectEntry(vmIp, folder, fileName)
    
    datafileName = os.path.join(HTML_ROOT, folder, vmIp, fileName)
    metaManifest = os.path.join(HTML_ROOT, folder, vmIp, "meta-data")
    if folder == "userdata":
        if contents != "none":
            contents = base64.urlsafe_b64decode(contents)
        else:
            contents = ""
            
    f = open(datafileName, 'w')
    f.write(contents) 
    f.close()
    
    if folder == "metadata" or folder == "meta-data":
        writeIfNotHere(metaManifest, [fileName])

if __name__ == '__main__':
    string = sys.argv[1]
    allEntires = string.split(";")
    for entry in allEntires:
        (vmIp, folder, fileName, contents) = entry.split(',', 3)
        addUserData(vmIp, folder, fileName, contents)
    sys.exit(0)    
