Exemplo n.º 1
0
/**
 * Action non securisee: c'est une porte ouverte par un webmestre
 * et seule la clé partagée migration_key permet de se proteger.
 * La clé s'invalide automatiquement apres un delai d'inactivité
 * 
 * @return void
 */
function action_migration_reception_dist(){

	if (!$s = lire_migration_depuis_status()){
		migration_reponse_fail('pas de migration en cours ou migration echouee par timeout');
	}

	if (!$data = _request('data')){
		migration_reponse_fail('pas de "data" dans la requete');
	}

	if (!$data = migration_decoder_data($data,$s['key'])){
		migration_reponse_fail('signature data invalide');
	}

	/*
	 * data est un tableau
	 * 'action' => action demandee
	 * 'data' => donnees passees a l'action
	 */

	if (!isset($data['action'])){
		migration_reponse_fail('aucune action demandee');
	}
	if ($s['status']=='init' AND $data['action']!=='connect'){
		migration_reponse_fail('action demandee '.$data['action'].' avant action connect reussie');
	}


	if (!$action = charger_fonction($data['action'],'migration/reception',true)) {
		migration_reponse_fail("action inconnue : ".$data['action']);
	}

	$res = $action($s, $data['data']);

	// toujours serializer le retour
	$res = serialize($res);
	spip_log("action ".$data['action'].' resultat:'.$res,'migration');
	echo $res;
	exit;
}
Exemplo n.º 2
0
function action_migration_depuis_status_dist(){
	#$securiser_action = charger_fonction('securiser_action','inc');
	#$securiser_action();

	$s = lire_migration_depuis_status();
	// verifier qu'un verrou n'etait pas sur le fichier
	// et qu'on arrive pas a le lire en attendant un peu
	if (!$s){
		usleep(333);
		$s = lire_migration_depuis_status();
	}
	// verifier qu'un verrou n'etait pas sur le fichier
	// et qu'on arrive pas a le lire en attendant un peu
	if (!$s){
		usleep(333);
		$s = lire_migration_depuis_status();
	}


	// peut etre on a fini ?
	if (!$s){
		$s = lire_migration_depuis_status(true);
	}

	if (!$s)
		ajax_retour("Echec : le site distant n'a pas réussi à se connecter, la migration a été abandonnée.");
	else{
		if ($s['key']!=_request('key')){
			ajax_retour("La clé de migration n'est plus valable, recommmencez la migration");
		}
		else {
			ajax_retour(migration_afficher_status($s));
		}
	}
	exit;
}
Exemplo n.º 3
0
function formulaires_assistant_migration_verifier_3_dist(){

	$erreurs = array();
	if (_request('direction')=='depuis'){
		// en cas d'abandon sur une migration "depuis", annuler
		if (_request('canceldepuis')){
			include_spip('inc/migration');
			$status = abandonner_migration_depuis();
			finir_migration_status_depuis();
			include_spip('inc/headers');
			$erreurs['message_erreur'] = _T('migration:titre_abandon_migration') . redirige_formulaire(generer_url_ecrire('migrer_depuis_fin'));
		}
		else {
			$s = lire_migration_depuis_status();
			if ($s AND $s['status']!=='ended')
				$erreurs['waiting'] = ' ';
		}
	}
	else {
		foreach(array('url_cible') as $obli)
			if (!_request($obli))
				$erreurs[$obli] = _T('info_obligatoire');
		if (strpos(_request('url_cible'),'+')===false)
			$erreurs['url_cible'] = _T('migration:erreur_url_incorrecte');
		if (!count($erreurs)){
			$url_cible = _request('url_cible');
			$url_cible = explode('+',$url_cible);
			$migration_key = array_pop($url_cible);
			$url_cible = implode('+',$url_cible);

			initialiser_migration_vers($url_cible,$migration_key,_request('quoi'));
			$connect = charger_fonction('connect','migration/envoi');
			$res = $connect($GLOBALS['meta']['adresse_site']);
			if ($res!==true){
				$erreurs['message_erreur'] = _T(is_string($res)?$res:'migration:erreur_echec_connexion_init');
			}
		}
	}

	return $erreurs;
}
Exemplo n.º 4
0
/**
 * Si la migration a echouee, peut on revenir a une base que l'on avait sauvegarde ?
 * (cas sqlite uniquement)
 * 
 * @return bool
 */
function migration_restore_base_si_possible(){
	$res = false;

	spip_log("tentative de restauration de la base",'migration');
	// si jamais la base est sqlite, et qu'on a un backup
	// le restaurer
	include_spip('base/abstract_sql');
	sql_version();
	if (strncmp($GLOBALS['connexions'][0]['type'],'sqlite',6)==0){
		if ($db =$GLOBALS['connexions'][0]['db']
			AND is_file($f = _DIR_DB . $db . '.sqlite')) {
			$s = lire_migration_depuis_status();
			spip_log("base SQLITE, le status indique backup=".$s['backup'],'migration');
			if ($g = $s['backup']
				AND @file_exists(_DIR_DB.$g)){
				spip_log("base $g restauree dans $f suite a l'echec de la migration",'migration');
				@copy(_DIR_DB.$g,$f);
				$res = true;
			}
		}
	}

	// securite, dans tous les cas
	sql_update('spip_auteurs', array('id_auteur'=>'-id_auteur'), "id_auteur<0");

	if ($GLOBALS['visiteur_session']['id_auteur']<0){
		$id_old = $GLOBALS['visiteur_session']['id_auteur'];
		$auteur = sql_fetsel('*','spip_auteurs','id_auteur='.intval(-$id_old));
		$session = charger_fonction('session','inc');
		$session($auteur); // creer la nouvelle session avec -id_auteur
		$session(); // la charger dans $GLOBALS['visiteur_session']
		$session($id_old); // supprimer l'ancienne session
	}

	return $res;
}