Module sync users/groups nextcloud
This commit is contained in:
@@ -1,4 +0,0 @@
|
|||||||
from nextcloud.models.alerts import *
|
|
||||||
|
|
||||||
# User too for good measure
|
|
||||||
from django.contrib.auth.models import User
|
|
@@ -1,29 +0,0 @@
|
|||||||
import logging
|
|
||||||
|
|
||||||
from django.dispatch import Signal
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
new_membership = Signal(Signal("user"))
|
|
||||||
ending_membership = Signal(Signal("user"))
|
|
||||||
updating_membership = Signal(["user"])
|
|
||||||
|
|
||||||
from django.db.models.signals import post_save, post_delete
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
|
|
||||||
|
|
||||||
def my_callback(sender,created,instance, **kwargs):
|
|
||||||
if created:
|
|
||||||
new_membership.send(sender=sender, user=instance)
|
|
||||||
else:
|
|
||||||
updating_membership.send(sender=sender, user=instance)
|
|
||||||
|
|
||||||
def del_callback(sender, instance, **kwargs):
|
|
||||||
ending_membership.send(sender=sender, user=instance)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
post_save.connect(my_callback, sender=User)
|
|
||||||
post_delete.connect(del_callback, sender=User)
|
|
||||||
|
|
@@ -1,7 +1,5 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from .models.alerts import new_membership, ending_membership, updating_membership
|
|
||||||
|
|
||||||
NEXTCLOUD_HOST = getattr(settings, 'NEXTCLOUD_HOST', 'test.ambulance-clerc.ch')
|
NEXTCLOUD_HOST = getattr(settings, 'NEXTCLOUD_HOST', 'test.ambulance-clerc.ch')
|
||||||
NEXTCLOUD_ADMIN = getattr(settings, 'NEXTCLOUD_ADMIN', 'admin')
|
NEXTCLOUD_ADMIN = getattr(settings, 'NEXTCLOUD_ADMIN', 'admin')
|
||||||
NEXTCLOUD_PASSWORD = getattr(settings, 'NEXTCLOUD_SECRET', 'Mc33*144')
|
NEXTCLOUD_PASSWORD = getattr(settings, 'NEXTCLOUD_SECRET', 'Mc33*144')
|
||||||
|
@@ -7,6 +7,8 @@ import owncloud as NextCloudCLI
|
|||||||
|
|
||||||
|
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from django.db.models.signals import post_save, post_delete
|
||||||
|
from django.contrib.auth.models import User, Group
|
||||||
|
|
||||||
from .settings import *
|
from .settings import *
|
||||||
|
|
||||||
@@ -17,18 +19,10 @@ def log(msg):
|
|||||||
print(msg)
|
print(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def adding_nexcloud_user(_user, **kwargs):
|
||||||
def randomStringDigits(stringLength=8):
|
|
||||||
# Generate a random string of letters and digits
|
|
||||||
lettersAndDigits = string.ascii_letters + string.digits
|
|
||||||
return ''.join(random.choice(lettersAndDigits) for i in range(stringLength))
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(new_membership)
|
|
||||||
def adding_nexcloud_user(sender, **kwargs):
|
|
||||||
print("pass add nextcloud user")
|
print("pass add nextcloud user")
|
||||||
# Add new member on the nextcloud server
|
# Add new member on the nextcloud server
|
||||||
_user = kwargs['user']
|
|
||||||
_pass = NEXTCLOUD_USER_DEFAULT_PASSWORD
|
_pass = NEXTCLOUD_USER_DEFAULT_PASSWORD
|
||||||
|
|
||||||
_admin = NEXTCLOUD_ADMIN
|
_admin = NEXTCLOUD_ADMIN
|
||||||
@@ -71,10 +65,10 @@ def adding_nexcloud_user(sender, **kwargs):
|
|||||||
log('Adding user %s success' % _user.username)
|
log('Adding user %s success' % _user.username)
|
||||||
|
|
||||||
|
|
||||||
@receiver(ending_membership)
|
@receiver(post_delete, sender= User)
|
||||||
def deactivating_nexcloud_user(sender, **kwargs):
|
def deactivating_nexcloud_user(instance, **kwargs):
|
||||||
# Remove member on the nextcloud server
|
# Remove member on the nextcloud server
|
||||||
_user = kwargs['user']
|
_user = instance
|
||||||
|
|
||||||
_admin = NEXTCLOUD_ADMIN
|
_admin = NEXTCLOUD_ADMIN
|
||||||
_admin_key = NEXTCLOUD_PASSWORD
|
_admin_key = NEXTCLOUD_PASSWORD
|
||||||
@@ -101,10 +95,10 @@ def deactivating_nexcloud_user(sender, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(updating_membership)
|
def update_nexcloud_user(_user, **kwargs):
|
||||||
def update_nexcloud_user(sender, **kwargs):
|
log(f"User edited {_user}")
|
||||||
# Change user password on the nextcloud server
|
# Change user password on the nextcloud server
|
||||||
_user = kwargs['user']
|
|
||||||
|
|
||||||
_admin = NEXTCLOUD_ADMIN
|
_admin = NEXTCLOUD_ADMIN
|
||||||
_admin_key = NEXTCLOUD_PASSWORD
|
_admin_key = NEXTCLOUD_PASSWORD
|
||||||
@@ -139,4 +133,79 @@ def get_pseudonyme_from_user(username):
|
|||||||
if "mc" in username:
|
if "mc" in username:
|
||||||
return " (" + username.split("@")[0].replace("mc","MC") + ")"
|
return " (" + username.split("@")[0].replace("mc","MC") + ")"
|
||||||
else:
|
else:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
@receiver(post_save, sender= User)
|
||||||
|
def post_save_User_handler(created,instance, **kwargs):
|
||||||
|
_user = instance
|
||||||
|
if created:
|
||||||
|
adding_nexcloud_user(_user=_user)
|
||||||
|
else:
|
||||||
|
update_nexcloud_user(_user=_user)
|
||||||
|
@receiver(post_save, sender= Group)
|
||||||
|
def adding_nexcloud_group(sender,instance,created, **kwargs):
|
||||||
|
if not created:
|
||||||
|
log(f"group Edited {instance.name}")
|
||||||
|
return False
|
||||||
|
# Add new member on the nextcloud server
|
||||||
|
_group = instance
|
||||||
|
|
||||||
|
|
||||||
|
_admin = NEXTCLOUD_ADMIN
|
||||||
|
_admin_key = NEXTCLOUD_PASSWORD
|
||||||
|
|
||||||
|
_url = '%s://%s' % (('http', 'https')[NEXTCLOUD_USE_HTTPS is True], NEXTCLOUD_HOST)
|
||||||
|
|
||||||
|
nc = NextCloudCLI.Client(_url, verify_certs=NEXTCLOUD_SSL_IS_SIGNED)
|
||||||
|
_err = ['login', 'create_group', 'enable_group']
|
||||||
|
try:
|
||||||
|
nc.login(_admin, _admin_key)
|
||||||
|
print("pass logged")
|
||||||
|
_err.pop(0)
|
||||||
|
try:
|
||||||
|
nc.create_group(_group.name)
|
||||||
|
_err.pop(0)
|
||||||
|
except NextCloudCLI.OCSResponseError as e:
|
||||||
|
if e.status_code == 102:
|
||||||
|
_err.pop(0)
|
||||||
|
else:
|
||||||
|
raise e
|
||||||
|
_err.pop(0)
|
||||||
|
nc.logout()
|
||||||
|
|
||||||
|
except NextCloudCLI.HTTPResponseError as e:
|
||||||
|
log('adding_nexcloug_group: %s HTTP Error %d' % (_err[0], e.status_code))
|
||||||
|
except requests.exceptions.ConnectionError as e:
|
||||||
|
log('adding_nexcloug_group: %s Connection Error: %s' % (_err[0], e))
|
||||||
|
except NextCloudCLI.OCSResponseError as e:
|
||||||
|
log('adding_nexcloug_group: %s OCSResponse Error %d' % (_err[0], e.status_code))
|
||||||
|
else:
|
||||||
|
log('Adding group %s success' % _group.name)
|
||||||
|
|
||||||
|
@receiver(post_delete, sender= Group)
|
||||||
|
def delete_nexcloud_group(sender,instance, **kwargs):
|
||||||
|
print("Remove group")
|
||||||
|
# Remove member on the nextcloud server
|
||||||
|
_group = instance
|
||||||
|
|
||||||
|
_admin = NEXTCLOUD_ADMIN
|
||||||
|
_admin_key = NEXTCLOUD_PASSWORD
|
||||||
|
|
||||||
|
_url = ('http', 'https')[NEXTCLOUD_USE_HTTPS is True] + '://' + NEXTCLOUD_HOST
|
||||||
|
|
||||||
|
nc = NextCloudCLI.Client(_url, verify_certs=NEXTCLOUD_SSL_IS_SIGNED)
|
||||||
|
_err = ['login', 'deactivate_user']
|
||||||
|
try:
|
||||||
|
nc.login(_admin, _admin_key)
|
||||||
|
_err.pop(0)
|
||||||
|
nc.delete_group(_group.name)
|
||||||
|
nc.logout()
|
||||||
|
|
||||||
|
except NextCloudCLI.HTTPResponseError as e:
|
||||||
|
log('removing_nexcloug_group: %s HTTP Error %d' % (_err[0], e.status_code))
|
||||||
|
except requests.exceptions.ConnectionError as e:
|
||||||
|
log('removing_nexcloug_group: %s Connection Error: %s' % (_err[0], e))
|
||||||
|
except NextCloudCLI.OCSResponseError as e:
|
||||||
|
log('removing_nexcloug_group: %s OCSResponse Error %d' % (_err[0], e.status_code))
|
||||||
|
else:
|
||||||
|
log('Removing group %s success' % _group.name)
|
||||||
|
Reference in New Issue
Block a user