2024-11-12 14:25:05 +01:00
|
|
|
#!/usr/bin/python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
#import importlib.resources
|
|
|
|
|
2024-11-20 16:21:26 +01:00
|
|
|
import os
|
|
|
|
from rivista.config import Cache, Data, Settings
|
|
|
|
from rivista.utilities import Toml
|
2024-11-12 14:25:05 +01:00
|
|
|
from rivista.http.instance import HttpInstance
|
2024-11-20 16:21:26 +01:00
|
|
|
import shutil
|
2024-11-12 14:25:05 +01:00
|
|
|
import uvicorn
|
|
|
|
|
|
|
|
def main():
|
|
|
|
http_instance = HttpInstance()
|
|
|
|
return http_instance.app
|
|
|
|
|
2024-11-20 16:21:26 +01:00
|
|
|
if __name__ == 'rivista.__main__':
|
|
|
|
|
|
|
|
directory = os.path.dirname(__file__)
|
|
|
|
|
|
|
|
# Copy data files
|
|
|
|
# FIXME File settins.toml is copied too.
|
|
|
|
directory_data = Data.get_directory()
|
|
|
|
if not os.path.exists(directory_data):
|
|
|
|
directory_assets = os.path.join(directory, 'assets')
|
|
|
|
directory_assets_new = shutil.copytree(directory_assets, directory_data)
|
|
|
|
print(f'Data directory {directory_assets_new} has been created and populated.')
|
|
|
|
|
|
|
|
# Copy settings files
|
|
|
|
directory_settings = Settings.get_directory()
|
|
|
|
if not os.path.exists(directory_settings):
|
|
|
|
directory_configs = os.path.join(directory, 'configs')
|
|
|
|
directory_settings_new = shutil.copytree(directory_configs, directory_settings)
|
|
|
|
print(f'Settings directory {directory_settings_new} has been created and populated.')
|
|
|
|
|
|
|
|
# Create cache directories
|
|
|
|
directory_cache = Cache.get_directory()
|
|
|
|
if not os.path.exists(directory_cache):
|
|
|
|
print(f'Creating a cache directory at {directory_cache}.')
|
|
|
|
os.mkdir(directory_cache)
|
|
|
|
# TODO Add more cache directories (see JabberCard).
|
|
|
|
# TODO Remove json (indices is the new name)
|
|
|
|
for subdirectory in ('json', 'indices', 'pubsub'):
|
|
|
|
subdirectory_cache = os.path.join(directory_cache, subdirectory)
|
|
|
|
if not os.path.exists(subdirectory_cache):
|
|
|
|
print(f'Creating a cache subdirectory at {subdirectory_cache}.')
|
|
|
|
os.mkdir(subdirectory_cache)
|
|
|
|
|
|
|
|
# Configure settings file
|
|
|
|
file_settings = os.path.join(directory_settings, 'settings.toml')
|
|
|
|
if not os.path.exists(file_settings):
|
|
|
|
directory_configs = os.path.join(directory, 'configs')
|
|
|
|
file_settings_empty = os.path.join(directory_configs, 'settings.toml')
|
|
|
|
shutil.copyfile(file_settings_empty, file_settings)
|
|
|
|
data_settings = Toml.open_file_toml(file_settings)
|
|
|
|
|
|
|
|
# Configure account
|
|
|
|
data_settings_account = data_settings['account']
|
|
|
|
|
|
|
|
settings_account = {
|
|
|
|
'xmpp': 'Set a Jabber ID',
|
|
|
|
'pass': 'Input Password'
|
|
|
|
}
|
|
|
|
|
|
|
|
for key in settings_account:
|
|
|
|
data_settings_account_value = data_settings_account[key]
|
|
|
|
if not data_settings_account_value:
|
|
|
|
settings_account_message = settings_account[key]
|
|
|
|
while not data_settings_account_value:
|
|
|
|
data_settings_account_value = input(f'{settings_account_message}: ')
|
|
|
|
data_settings_account[key] = data_settings_account_value
|
|
|
|
|
|
|
|
# Configure default PubSub Service and Node Name
|
|
|
|
data_settings_default = data_settings['default']
|
|
|
|
|
|
|
|
settings_default_default = {
|
|
|
|
'pubsub': 'pubsub.woodpeckersnest.space',
|
|
|
|
'nodeid': 'PlanetJabber'
|
|
|
|
}
|
|
|
|
|
|
|
|
for key in settings_default_default:
|
|
|
|
data_settings_default_value = data_settings_default[key]
|
|
|
|
if not data_settings_default_value:
|
|
|
|
settings_default_default_value = settings_default_default[key]
|
|
|
|
data_settings_default_value = input(f'Set brand {key} (default: "{settings_default_default_value}"): ')
|
|
|
|
if not data_settings_default_value: data_settings_default_value = settings_default_default_value
|
|
|
|
data_settings_default[key] = data_settings_default_value
|
|
|
|
|
|
|
|
# Configure Settings
|
|
|
|
data_settings_settings = data_settings['settings']
|
|
|
|
|
|
|
|
data_settings_settings_service = data_settings_settings['service']
|
|
|
|
if data_settings_settings_service is '':
|
|
|
|
while data_settings_settings_service not in ('n', 'N', 'no', 'No', 'y', 'Y', 'yes', 'Yes'):
|
|
|
|
data_settings_settings_service = input(f'Run as service? [Y/n] ')
|
|
|
|
if data_settings_settings_service in ('y', 'Y', 'yes', 'Yes'):
|
|
|
|
data_settings_settings['service'] = 1
|
|
|
|
else:
|
|
|
|
data_settings_settings['service'] = 0
|
|
|
|
|
|
|
|
data_settings_settings_include = data_settings_settings['include']
|
|
|
|
if data_settings_settings_include is '':
|
|
|
|
data_settings_settings_include = input(f'Limit service to included domains? (comma separated. remain empty for no limit) ')
|
|
|
|
data_settings_settings['include'] = data_settings_settings_include if data_settings_settings_include else 0
|
|
|
|
|
|
|
|
data_settings_settings_operator = data_settings_settings['operator']
|
|
|
|
if data_settings_settings_operator is '':
|
|
|
|
data_settings_settings['operator'] = input(f'Set a Jabber ID of an operator to contact with: ')
|
|
|
|
|
|
|
|
Toml.save_to_toml(file_settings, data_settings)
|
|
|
|
|
|
|
|
# Start JabberCard
|
|
|
|
app = main()
|
|
|
|
uvicorn.run(app, host='localhost', port=8000, reload=False)
|