Nutzermigration

This commit is contained in:
holger.trampe 2021-07-27 09:51:58 +02:00
parent d577ca4e40
commit 52de2bc847
3 changed files with 95 additions and 10 deletions

View File

@ -6,17 +6,19 @@
<small>Die Seite nicht verlassen oder neu laden!</small> <small>Die Seite nicht verlassen oder neu laden!</small>
<hr> <hr>
<div> <div>
<h5 id="groups_process">Gruppen anlegen...</h5> <h5 id="groups_process">Es werden {{groups|length}} Gruppen angelegt...</h5>
<div id="groups_process_groups"></div> <div id="groups_process_groups"></div>
<h5 id="user_process" style="display: none;">Es werden {{users|length}} Benutzer angelegt und in die Gruppen gepackt. Die Nutzer müssen sich dann ein neues Passwort setzen.</h5>
<div id="user_process_user" style="display: none;"></div>
</div> </div>
<h5 id="migfinished" style="display: none;">Migration vollständig. Bitte diese Seite ausdrucken oder Speichern. Ein erneuter Import ist nicht möglich!</h5>
<script> <script>
var userids = [{% for us in users %} {{us.pk}} {% if forloop.counter0 < users|length %}, {% endif %} {% endfor %}]; var userids = [{% for us in users %} "{{us.pk}}" {% if forloop.counter < users|length %}, {% endif %} {% endfor %}];
var groupids = [{% for g in groups %} "{{g.name}}" {% if forloop.counter0 < groups|length %}, {% endif %} {% endfor %}]; var groupids = [{% for g in groups %} "{{g.name}}" {% if forloop.counter < groups|length %}, {% endif %} {% endfor %}];
$(document).ready(function(){ $(document).ready(function(){
// FIRST CALL GROUPS // FIRST CALL GROUPS, When Groups finished User will call by Groups
createAgencyGroups(groupids[0]); createAgencyGroups(groupids[0]);
console.log('{{ nclink }}');
}) })
var groupcounter = 0; var groupcounter = 0;
@ -39,6 +41,44 @@
if(groupcounter < groupids.length){ if(groupcounter < groupids.length){
createAgencyGroups(groupids[groupcounter]); createAgencyGroups(groupids[groupcounter]);
} }
else {
createUsers(userids[0]);
}
}
},
error: function(e){
console.log(e);
}
});
}
var usercounter = 0;
function createUsers(userid){
console.log(userid);
$("#user_process").show();
$("#user_process_user").show();
$.ajax({
url: "{% url 'api:apiadduser' %}",
headers: {
'Authorization':'Token {{ ncid }}',
"Access-Control-Allow-Origin" : "*"
},
method: 'POST',
dataType: 'json',
data: {
'agencyid' : {{agency.pk}},
'userid' : userid
},
success: function(data){
if(data['status'] == true){
$("#user_process_user").append('<p>' + data['message'] + "</p>");
usercounter += 1;
if(usercounter < userids.length){
createUsers(userids[usercounter]);
}
else {
$("#migfinished").show();
}
} }
}, },
error: function(e){ error: function(e){

View File

@ -15,9 +15,7 @@ urlpatterns = [
# MIGRATION # MIGRATION
path('migrateagencyusers/<int:pk>', views.migrateAgencyUsers, name="api-migrateagencyusers"), path('migrateagencyusers/<int:pk>', views.migrateAgencyUsers, name="api-migrateagencyusers"),
path('addgroup/', views.NCAddGroup, name="apiaddgroup"), path('addgroup/', views.NCAddGroup, name="apiaddgroup"),
path('adduser/', views.NCAddUser, name="apiadduser"),
# EXTERNAL FROM NC # EXTERNAL FROM NC
path('logout/<str:uid>', views.apilogout, name="api-logout"), path('logout/<str:uid>', views.apilogout, name="api-logout"),

View File

@ -113,6 +113,8 @@ def userChangedInNc(request, uid, sid):
js = json.dumps(xpars) js = json.dumps(xpars)
final_json = json.loads(js) final_json = json.loads(js)
new_displayname = final_json['ocs']['data']['displayname'].split(" ") new_displayname = final_json['ocs']['data']['displayname'].split(" ")
new_email = final_json['ocs']['data']['email']
user.email = new_email
user.first_name = new_displayname[0] user.first_name = new_displayname[0]
new_last_name = "" new_last_name = ""
new_displayname.pop(0) new_displayname.pop(0)
@ -133,6 +135,10 @@ def get_random_number(length = 6):
result_str = ''.join(random.choice("0123456789") for i in range(length)) result_str = ''.join(random.choice("0123456789") for i in range(length))
return result_str return result_str
def get_random_password(length = 6):
result_str = ''.join(random.choice("!_-abcdefghijklmnopqrstuvwxyzABCDEFGHIJLMNOPQRSTUVWXYZ0123456789") for i in range(length))
return result_str
# Returns a new groupID for NC by Groupname and Agency # Returns a new groupID for NC by Groupname and Agency
def create_group_id(agencygroupname, agency): def create_group_id(agencygroupname, agency):
newgroupid = "" newgroupid = ""
@ -189,10 +195,51 @@ def NCAddGroup(request):
'Authorization': 'Bearer ' + request.COOKIES['nc_session_id'] 'Authorization': 'Bearer ' + request.COOKIES['nc_session_id']
} }
r = requests.post(settings.NEXTCLOUD_URL + "apps/agency/regr", data=data, headers=headers) r = requests.post(settings.NEXTCLOUD_URL + "apps/agency/regr", data=data, headers=headers)
print(r.text) request_status = True
return JsonResponse({'status' : True, 'message': 'Gruppe ' + aggroup.agencygroupname + ' erzeugt - ID: ' + newgroupid}) return JsonResponse({'status' : True, 'message': 'Gruppe ' + aggroup.agencygroupname + ' erzeugt - ID: ' + newgroupid})
else: else:
trycounter += 1 trycounter += 1
newgroupid = create_group_id(aggroup.agencygroupname, agency) newgroupid = create_group_id(aggroup.agencygroupname, agency)
return JsonResponse({"status" : "NO AUTH"}) return JsonResponse({"status" : "NO AUTH"})
@api_view(['POST'], )
def NCAddUser(request):
if request.method == "POST":
agency = Agency.objects.get(pk=request.POST.get('agencyid'))
user = User.objects.get(pk=request.POST['userid'])
# Check, that only users in the same agency can do that!
if(user.profile.agency == agency):
# Load all groups the User is in and get AgencyGroup for NC-Group-Name
groups = []
for g in user.groups.all():
groups.append(AgencyGroup.objects.get(group=g).nc_name)
password = get_random_password(50)
userid = user.username
displayName = user.first_name + " " + user.last_name
email = user.email
# Data for the new User
data = {
"userid": userid,
"password": password,
"displayName": displayName,
"email":email,
"groups[]":groups
}
headers = {
'Accept' : 'application/json',
'Access-Control-Allow-Headers' : 'OCS-APIRequest',
'OCS-APIRequest' : 'true'
}
# Request for adding the new User
r = requests.post(settings.NEXTCLOUD_URL + "ocs/v1.php/cloud/users", data=data, headers=headers, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API))
r_status = json.loads(r.text)
if(r_status['ocs']['meta']['statuscode'] == 100):
return JsonResponse({'status' : True, 'message': 'Benutzer ' + user.first_name + " " + user.last_name + ' angelegt und in die Gruppen gepackt.'})
else:
return JsonResponse({'status' : True, 'message': 'Benutzer ' + user.first_name + " " + user.last_name + ' konnte nicht angelegt werden. Bitte manuell prüfen!'})
return JsonResponse({"status" : "NO AUTH"})