This commit is contained in:
Giulio 2021-03-10 21:45:00 +01:00
commit 7903f61b44
2 changed files with 84 additions and 0 deletions

7
Readme.md Normal file
View File

@ -0,0 +1,7 @@
Forked froma script that was once available on GitHub and now deleted.
Configure Boto3 with the Object Storage endpoint and credentials.
Change the endpoint in the Javascript file that play the presentation and anywhhere else in BBB templates.
This script should run in cron and it is possible to choose if the original files have to be deleted or not. `metadata.xml` is always kept locally bevcause it's what BBB uses to keep track of the records.

77
bbb-s3.py Normal file
View File

@ -0,0 +1,77 @@
import os, glob, shutil, boto3, magic
from botocore.exceptions import NoCredentialsError
mime = magic.Magic(mime=True)
## Configuration Part
BUCKET_NAME = 'bigbluebutton'
DELETE_SERVER_FILES = True ## Set False (F should be capital) if you don't want to delete files from bbb-server
def upload_to_aws(local_file, bucket, s3_file):
ctype = mime.from_file(local_file)
s3 = boto3.client('s3')
try:
s3.upload_file(local_file, bucket, s3_file, ExtraArgs={'ContentType': ctype, 'ACL': "public-read"})
return True
except OSError as e:
if e.errno == errno.ENOENT:
print("\nFile not found\n")
except NoCredentialsError:
return False
def getListOfFiles(dirName):
listOfFile = os.listdir(dirName)
allFiles = list()
for entry in listOfFile:
fullPath = os.path.join(dirName, entry)
if os.path.isdir(fullPath):
allFiles = allFiles + getListOfFiles(fullPath)
else:
allFiles.append(fullPath)
return allFiles
def getListOfDirs(path):
return [os.path.basename(x) for x in filter(
os.path.isdir, glob.glob(os.path.join(path, '*')))]
def remove(path):
""" param <path> could either be relative or absolute. """
if (os.path.isfile(path) or os.path.islink(path)) and "metadata.xml" not in path:
os.remove(path) # remove the file
elif os.path.isdir(path):
shutil.rmtree(path) # remove dir and all contains
else:
pass
#raise ValueError("file {} is not a file or dir.".format(path))
def main():
dirName = os.getcwd();
listOfFiles = getListOfFiles(dirName)
listOfDirs = getListOfDirs(dirName)
for elem in listOfFiles:
listOfFiles = list()
for (dirpath, dirnames, filenames) in os.walk(dirName):
listOfFiles += [os.path.join(dirpath, file) for file in filenames]
for elem in listOfFiles:
relative_path = elem.replace(dirName,'')[1:]
if(relative_path!='bbb-s3.py'):
print("\nUploading "+relative_path)
uploaded = upload_to_aws(elem, BUCKET_NAME, relative_path)
if(uploaded and DELETE_SERVER_FILES):
remove(elem)
else:
print("\nNot able to delete files from your bbb-server, check file if its uploaded")
file_length = len(listOfFiles)
if(file_length==1):
for folder in listOfDirs:
remove(folder)
if __name__ == '__main__':
main()