#!/bin/bash #================================================= # GENERIC START #================================================= # Import common cmd source scripts/experimental_helper.sh source scripts/_common.sh # Source YunoHost helpers source /usr/share/yunohost/helpers # Stop script if errors ynh_abort_if_errors ynh_print_info --message="Loading installation settings..." # Retrive arguments domain=$(ynh_app_setting_get --app $app --key domain) #================================================= # FUNCTION DECLARATION #================================================= stop_seafile() { ynh_print_info --message="Stoping seafile..." # Stop service before any change ynh_systemd_action --service_name seafile --action stop ynh_systemd_action --service_name seahub --action stop sleep 2 pkill -f seafile-controller || true pkill -f seaf-server || true pkill -f ccnet-server || true pkill -f seahub || true } start_seafile(){ ynh_print_info --message="Starting seafile..." # Avoid the current effect sleep 2 # Reload services ynh_print_info --message="Starting services..." ynh_systemd_action --service_name seafile -l "spawned seaf-server, pid " -p /var/log/seafile/controller.log ynh_systemd_action --service_name seahub -l "Started Seafile hub." -p "systemd" sleep 2 } get_email_list_in_seafile() { sql_request='SELECT email FROM `EmailUser`; SELECT email FROM `LDAPUsers`' all_user_list=$(ynh_mysql_execute_as_root --sql "$sql_request" --database ccnetdb | grep -v "^email$") user_list=$(echo "$all_user_list" | grep "@$domain$" || true) } migrate_email_in_database() { ynh_print_info --message="Migrating email $1 to $2" local old_email=$1 local new_email=$2 sleep 1 if [[ "$all_user_list" =~ "$new_email" ]]; then ynh_print_err --message "The user '$new_email' already exist in seafile, can rename '$old_email' to '$new_email'" return fi if ! [[ "$all_user_list" =~ "$old_email" ]]; then ynh_print_err --message "The user '$old_email' don't exist in seafile, can rename '$old_email' to '$new_email'" return fi # Update database # This fonction relplace all old domain name by the new domain name. # use : mysql_relpace_db db_name table collum mysql_relpace_db() { sql_request='UPDATE `'"$2"'` SET '"$3 = replace($3, '$old_email', '$new_email')" ynh_mysql_execute_as_root --sql "$sql_request" --database $1 } # TODO check DB update # ccnet DB mysql_relpace_db ccnetdb Binding email mysql_relpace_db ccnetdb EmailUser email mysql_relpace_db ccnetdb Group creator_name mysql_relpace_db ccnetdb GroupUser user_name mysql_relpace_db ccnetdb LDAPUsers email mysql_relpace_db ccnetdb Organization creator mysql_relpace_db ccnetdb OrgUser email mysql_relpace_db ccnetdb UserRole email # seafile DB # Note that when we do a migration from seafile v6 some time don't exist. So yes it's probably a bug on seafile side. But anyway just ignore this problem... mysql_relpace_db seafiledb FolderUserPerm user || true mysql_relpace_db seafiledb OrgGroupRepo owner || true mysql_relpace_db seafiledb OrgRepo user || true mysql_relpace_db seafiledb OrgSharedRepo from_email || true mysql_relpace_db seafiledb OrgSharedRepo to_email || true mysql_relpace_db seafiledb OrgUserQuota user mysql_relpace_db seafiledb RepoGroup user_name mysql_relpace_db seafiledb RepoInfo last_modifier mysql_relpace_db seafiledb RepoOwner owner_id mysql_relpace_db seafiledb RepoTrash owner_id mysql_relpace_db seafiledb RepoUserToken email mysql_relpace_db seafiledb SharedRepo from_email mysql_relpace_db seafiledb SharedRepo to_email mysql_relpace_db seafiledb UserQuota user mysql_relpace_db seafiledb UserShareQuota user # seahub DB mysql_relpace_db seahubdb api2_token user mysql_relpace_db seahubdb api2_tokenv2 user mysql_relpace_db seahubdb auth_user email mysql_relpace_db seahubdb auth_user username mysql_relpace_db seahubdb auth_user_groups user_id mysql_relpace_db seahubdb auth_user_user_permissions user_id mysql_relpace_db seahubdb avatar_avatar emailuser mysql_relpace_db seahubdb base_clientlogintoken username mysql_relpace_db seahubdb base_devicetoken user mysql_relpace_db seahubdb base_filecomment author mysql_relpace_db seahubdb base_innerpubmsg from_email mysql_relpace_db seahubdb base_innerpubmsgreply from_email mysql_relpace_db seahubdb base_userenabledmodule username mysql_relpace_db seahubdb base_userlastlogin username mysql_relpace_db seahubdb base_userstarredfiles email mysql_relpace_db seahubdb django_cas_ng_proxygrantingticket user || true mysql_relpace_db seahubdb drafts_draft username mysql_relpace_db seahubdb group_groupmessage from_email mysql_relpace_db seahubdb group_messagereply from_email mysql_relpace_db seahubdb institutions_institutionadmin user mysql_relpace_db seahubdb notifications_usernotification to_user mysql_relpace_db seahubdb options_useroptions email mysql_relpace_db seahubdb post_office_attachment_emails email_id mysql_relpace_db seahubdb post_office_email from_email mysql_relpace_db seahubdb profile_profile user mysql_relpace_db seahubdb profile_profile login_id mysql_relpace_db seahubdb profile_profile contact_email mysql_relpace_db seahubdb registration_registrationprofile emailuser_id mysql_relpace_db seahubdb role_permissions_adminrole email mysql_relpace_db seahubdb share_anonymousshare repo_owner mysql_relpace_db seahubdb share_extrasharepermission share_to mysql_relpace_db seahubdb share_fileshare username mysql_relpace_db seahubdb share_privatefiledirshare from_user mysql_relpace_db seahubdb share_privatefiledirshare to_user mysql_relpace_db seahubdb share_uploadlinkshare username mysql_relpace_db seahubdb social_auth_code email || true mysql_relpace_db seahubdb social_auth_usersocialauth username mysql_relpace_db seahubdb sysadmin_extra_userloginlog username mysql_relpace_db seahubdb tags_filetag username mysql_relpace_db seahubdb termsandconditions_usertermsandconditions username mysql_relpace_db seahubdb two_factor_phonedevice user mysql_relpace_db seahubdb two_factor_staticdevice user mysql_relpace_db seahubdb two_factor_totpdevice user mysql_relpace_db seahubdb wiki_personalwiki username mysql_relpace_db seahubdb wiki_wiki username ynh_print_info --message="Migration of email $1 to $2 done" } migrate_user() { stop_seafile get_email_list_in_seafile migrate_email_in_database $YNH_ACTION_OLD_EMAIL $YNH_ACTION_NEW_EMAIL start_seafile } migrate_all_user() { stop_seafile get_email_list_in_seafile for user in $user_list; do # Try to get the main email of the user in yunohost which has is the old email user_main_email=$(yunohost tools shell -c " from yunohost.user import user_info info = user_info('$user'.split('@')[0]) print(info['mail']) exit() ") if [ "$user" == "$user_main_email" ]; then ynh_print_info --message "Nothing to do for user $user." fi migrate_email_in_database $user $user_main_email done start_seafile } #================================================= # STANDARD MODIFICATIONS #================================================= case $YNH_ACTION in migrate_user_email_to_mail_email) migrate_all_user;; change_user_email) migrate_user;; esac