Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions opwen_email_server/api/client_read.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,24 @@
from opwen_email_server import events
from opwen_email_server.backend import server_datastore
from opwen_email_server.services.auth import AzureAuth
from opwen_email_server.services.storage import AzureFileStorage
from opwen_email_server.services.storage import AzureObjectStorage
from opwen_email_server.services.storage import AzureTextStorage
from opwen_email_server.utils.log import LogMixin

STORAGE = AzureObjectStorage(account=config.CLIENT_STORAGE_ACCOUNT,
key=config.CLIENT_STORAGE_KEY,
container=constants.CONTAINER_CLIENT_PACKAGES,
provider=config.STORAGE_PROVIDER)

CLIENTS = AzureAuth(account=config.TABLES_ACCOUNT,
key=config.TABLES_KEY,
table=constants.TABLE_AUTH,
provider=config.STORAGE_PROVIDER)
STORAGE = AzureObjectStorage(
file_storage=AzureFileStorage(
account=config.CLIENT_STORAGE_ACCOUNT,
key=config.CLIENT_STORAGE_KEY,
container=constants.CONTAINER_CLIENT_PACKAGES,
provider=config.STORAGE_PROVIDER))

CLIENTS = AzureAuth(
storage=AzureTextStorage(
account=config.TABLES_ACCOUNT,
key=config.TABLES_KEY,
container=constants.TABLE_AUTH,
provider=config.STORAGE_PROVIDER))


class _Downloader(LogMixin):
Expand Down
11 changes: 7 additions & 4 deletions opwen_email_server/api/client_write.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,20 @@
from opwen_email_server import events
from opwen_email_server.services.auth import AzureAuth
from opwen_email_server.services.queue import AzureQueue
from opwen_email_server.services.storage import AzureTextStorage
from opwen_email_server.utils.log import LogMixin

QUEUE = AzureQueue(namespace=config.QUEUES_NAMESPACE,
sas_key=config.QUEUES_SAS_KEY,
sas_name=config.QUEUES_SAS_NAME,
name=constants.QUEUE_CLIENT_PACKAGE)

CLIENTS = AzureAuth(account=config.TABLES_ACCOUNT,
key=config.TABLES_KEY,
table=constants.TABLE_AUTH,
provider=config.STORAGE_PROVIDER)
CLIENTS = AzureAuth(
storage=AzureTextStorage(
account=config.TABLES_ACCOUNT,
key=config.TABLES_KEY,
container=constants.TABLE_AUTH,
provider=config.STORAGE_PROVIDER))


class _Uploader(LogMixin):
Expand Down
10 changes: 6 additions & 4 deletions opwen_email_server/api/email_receive.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@
sas_name=config.QUEUES_SAS_NAME,
name=constants.QUEUE_SENDGRID_MIME)

CLIENTS = AzureAuth(account=config.TABLES_ACCOUNT,
key=config.TABLES_KEY,
table=constants.TABLE_AUTH,
provider=config.STORAGE_PROVIDER)
CLIENTS = AzureAuth(
storage=AzureTextStorage(
account=config.TABLES_ACCOUNT,
key=config.TABLES_KEY,
container=constants.TABLE_AUTH,
provider=config.STORAGE_PROVIDER))


class _Receiver(LogMixin):
Expand Down
11 changes: 7 additions & 4 deletions opwen_email_server/api/store_written_client_emails.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from opwen_email_server import events
from opwen_email_server.backend import server_datastore
from opwen_email_server.services.queue import AzureQueue
from opwen_email_server.services.storage import AzureFileStorage
from opwen_email_server.services.storage import AzureObjectStorage
from opwen_email_server.utils.email_parser import get_domain
from opwen_email_server.utils.log import LogMixin
Expand All @@ -12,10 +13,12 @@
sas_name=config.QUEUES_SAS_NAME,
name=constants.QUEUE_EMAIL_SEND)

STORAGE = AzureObjectStorage(account=config.CLIENT_STORAGE_ACCOUNT,
key=config.CLIENT_STORAGE_KEY,
container=constants.CONTAINER_CLIENT_PACKAGES,
provider=config.STORAGE_PROVIDER)
STORAGE = AzureObjectStorage(
file_storage=AzureFileStorage(
account=config.CLIENT_STORAGE_ACCOUNT,
key=config.CLIENT_STORAGE_KEY,
container=constants.CONTAINER_CLIENT_PACKAGES,
provider=config.STORAGE_PROVIDER))


class _WrittenStorer(LogMixin):
Expand Down
10 changes: 2 additions & 8 deletions opwen_email_server/services/auth.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
from functools import lru_cache
from json import loads
from os import getenv
from typing import Optional

from libcloud.storage.types import ObjectDoesNotExistError
Expand All @@ -10,12 +8,8 @@


class AzureAuth(LogMixin):
def __init__(self, account: str, key: str, table: str,
provider: str) -> None:
self._storage = AzureTextStorage(account, key, table, provider)

for client in loads(getenv('LOKOLE_DEFAULT_CLIENTS', '[]')):
self.insert(client['id'], client['domain'])
def __init__(self, storage: AzureTextStorage) -> None:
self._storage = storage

def insert(self, client_id: str, domain: str):
self._storage.store_text(client_id, domain)
Expand Down
9 changes: 3 additions & 6 deletions opwen_email_server/services/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def __iter__(self) -> Iterator[str]:
yield resource.name


class _AzureFileStorage(_BaseAzureStorage):
class AzureFileStorage(_BaseAzureStorage):
def store_file(self, resource_id: str, path: str):
self.log_debug('storing file %s at %s', path, resource_id)
self._client.upload_object(path, resource_id)
Expand Down Expand Up @@ -90,11 +90,8 @@ def fetch_text(self, resource_id: str) -> str:
class AzureObjectStorage(LogMixin):
_encoding = 'utf-8'

def __init__(self, account: str, key: str, container: str,
provider: str) -> None:
self._file_storage = _AzureFileStorage(
account=account, key=key, container=container,
provider=provider)
def __init__(self, file_storage: AzureFileStorage) -> None:
self._file_storage = file_storage

@property
def container(self) -> str:
Expand Down
20 changes: 16 additions & 4 deletions registerclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
from opwen_email_server import azure_constants as constants
from opwen_email_server import config
from opwen_email_server.services.auth import AzureAuth
from opwen_email_server.services.storage import AzureFileStorage
from opwen_email_server.services.storage import AzureObjectStorage
from opwen_email_server.services.storage import AzureTextStorage

parser = ArgumentParser()
parser.add_argument('--tables_account', default=config.TABLES_ACCOUNT)
Expand All @@ -14,15 +16,25 @@
parser.add_argument('--client_key', default=config.CLIENT_STORAGE_KEY)
parser.add_argument('--table', default=constants.TABLE_AUTH)
parser.add_argument('--container', default=constants.CONTAINER_CLIENT_PACKAGES)
parser.add_argument('--provider', default=config.STORAGE_PROVIDER)
parser.add_argument('--client', required=True)
parser.add_argument('--domain', required=True)
args = parser.parse_args()

auth = AzureAuth(account=args.tables_account, key=args.tables_key,
table=args.table)
auth = AzureAuth(
storage=AzureTextStorage(
account=args.tables_account,
key=args.tables_key,
container=args.table,
provider=args.provider))

auth.insert(client_id=args.client, domain=args.domain)

# noinspection PyStatementEffect,PyProtectedMember
# hack to ensure that the container gets created before the client accesses it
storage = AzureObjectStorage(account=args.client_account, key=args.client_key,
container=args.container)._file_storage._client
storage = AzureObjectStorage(
file_storage=AzureFileStorage(
account=args.client_account,
key=args.client_key,
container=args.container,
provider=args.provider))._file_storage._client
9 changes: 7 additions & 2 deletions tests/opwen_email_server/services/test_auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,18 @@
from unittest import TestCase

from opwen_email_server.services.auth import AzureAuth
from opwen_email_server.services.storage import AzureTextStorage


class AzureAuthTests(TestCase):
def setUp(self):
self._folder = mkdtemp()
self._auth = AzureAuth(account=self._folder, key='key',
table='auth', provider='LOCAL')
self._auth = AzureAuth(
storage=AzureTextStorage(
account=self._folder,
key='key',
container='auth',
provider='LOCAL'))

def tearDown(self):
rmtree(self._folder)
Expand Down
12 changes: 7 additions & 5 deletions tests/opwen_email_server/services/test_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,9 @@

from libcloud.storage.types import ObjectDoesNotExistError

from opwen_email_server.services.storage import AzureFileStorage
from opwen_email_server.services.storage import AzureObjectStorage
from opwen_email_server.services.storage import AzureTextStorage
# noinspection PyProtectedMember
from opwen_email_server.services.storage import _AzureFileStorage


class AzureTextStorageTests(TestCase):
Expand Down Expand Up @@ -76,7 +75,7 @@ def _given_file(self, resource_id: str, expected_content: str):
def setUp(self):
self._folder = mkdtemp()
self._container = 'container'
self._storage = _AzureFileStorage(
self._storage = AzureFileStorage(
account=self._folder, key='key',
container=self._container, provider='LOCAL')
self._extra_files = set()
Expand Down Expand Up @@ -148,8 +147,11 @@ def setUp(self):
self._container = 'container'
mkdir(join(self._folder, self._container))
self._storage = AzureObjectStorage(
account=self._folder, key='unused',
container=self._container, provider='LOCAL')
file_storage=AzureFileStorage(
account=self._folder,
key='unused',
container=self._container,
provider='LOCAL'))

def tearDown(self):
rmtree(self._folder)