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, "'", '"')