60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
import textwrap
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from orchestra.contrib.orchestration import ServiceController, replace
|
|
|
|
from .. import settings
|
|
|
|
|
|
class BSCWBackend(ServiceController):
|
|
verbose_name = _("BSCW SaaS")
|
|
model = 'saas.SaaS'
|
|
default_route_match = "saas.service == 'bscw'"
|
|
actions = ('save', 'delete', 'validate_creation')
|
|
doc_settings = (settings,
|
|
('SAAS_BSCW_BSADMIN_PATH',)
|
|
)
|
|
|
|
def validate_creation(self, saas):
|
|
context = self.get_context(saas)
|
|
self.append(textwrap.dedent("""\
|
|
if %(bsadmin)s register %(email)s > /dev/null; then
|
|
echo 'ValidationError: email-exists'
|
|
fi
|
|
if %(bsadmin)s users -n %(username)s > /dev/null; then
|
|
echo 'ValidationError: user-exists'
|
|
fi""") % context
|
|
)
|
|
|
|
def save(self, saas):
|
|
context = self.get_context(saas)
|
|
if hasattr(saas, 'password'):
|
|
self.append(textwrap.dedent("""\
|
|
if [[ ! $(%(bsadmin)s register %(email)s) && ! $(%(bsadmin)s users -n %(username)s) ]]; then
|
|
# Create new user
|
|
%(bsadmin)s register -r %(email)s %(username)s '%(password)s'
|
|
else
|
|
# Change password
|
|
%(bsadmin)s chpwd %(username)s '%(password)s'
|
|
fi
|
|
""") % context
|
|
)
|
|
elif saas.active:
|
|
self.append("%(bsadmin)s chpwd -u %(username)s" % context)
|
|
else:
|
|
self.append("%(bsadmin)s chpwd -l %(username)s" % context)
|
|
|
|
def delete(self, saas):
|
|
context = self.get_context(saas)
|
|
self.append("%(bsadmin)s rmuser -n %(username)s" % context)
|
|
|
|
def get_context(self, saas):
|
|
context = {
|
|
'bsadmin': settings.SAAS_BSCW_BSADMIN_PATH,
|
|
'email': saas.data.get('email'),
|
|
'username': saas.name,
|
|
'password': getattr(saas, 'password', None),
|
|
}
|
|
return replace(context, "'", '"')
|