Uwaga! Od sierpnia 2017 forum jest w trybie tylko do odczytu.

Dlaczego? Dlatego, że społeczność TYPO3 przeniosła się na slack'a i stackoverflow:
  • Przeczytaj artykuł wprowadzający do slacka, w którym dowiesz gdzie i jak się zarejestrować.
  • Jeżeli masz pytania odnośnie Polskiej Społeczności TYPO3 zapraszamy na kanał slack'a #community-pl. Rozmawiamy tam w języku polskim.
  • Pytania dotyczące samego TYPO3 zadawaj po angielsku na stackoverflow oznaczając je tagiem "typo3". Następnie posługując się linkiem do tego pytania postaraj się zachęcić ludzi z kanału slack'a #typo3-cms lub bardziej pasujących kanałów tematycznych, żeby na nie odpowiedzieli.
  • Możesz też oczywiście zadawać pytania na slacku bez zakładania wątków na stackoverflow, ale wówczas wiedza ta nie jest indeksowana przez googla i część osób nie będzie chciała Ci z tego powodu pomagać.
  • Dla części osób dzielących się wiedzą ważne jest też budowanie reputacji na stackoverflow. Jest to kolejny powód dla którego powinieneś zadawać pytania na stackoverflow by zwiększyć swoje szanse na znalezienie odpowiedzi. Pamiętaj, żeby oceniać odpowiedzi!
Tematy bez nowych odpowiedzi

ts_dialogin i rsa - jak dodać


Autor Wiadomość
Napisane: 09.12.2013 [17:17]
djgregor
Twórca tematu
zarejestrowany: 19.08.2013
Posty: 8
Witam,

Mam problem z rozszerzeniem ts_dialogin (okienko logowania jQuery użytkownika w FE).

Problemem jest kodowanie hasła rsa...
Zmieniłem konfigurację z 'rsa' na normal
$TYPO3_CONF_VARS['FE']['loginSecurityLevel'] = 'normal';
i zaczęło działać...

Jak teraz najlepiej włączyć do rozszerzenia ts_dialogin kodowanie rsa?

Rozszerzenie felogin (działa z rsa i bez) wywołuje kodowanie rsa przed wysłaniem formularza:
HTML
<form action="index.php?id=9" target="_top" method="post" onsubmit="tx_rsaauth_feencrypt(this);; return true;">



Funkcja używana przez felogin:
JAVASCRIPT
function tx_rsaauth_feencrypt(form){
	if(form.pass.value.match(/^rsa:/)||form.n.value==""||form.e.value==""<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />{
		return
	}
	var rsa=new RSAKey();
	rsa.setPublic(form.n.value,form.e.value);
	var username=form.user.value;
	var password=form.pass.value;
	var res=rsa.encrypt(password);
	form.pass.value="";
	form.e.value="";
	form.n.value="";
	if(res){
		form.pass.value="rsa:"+hex2b64(res)
	}
}


W formularzu logowania felogin są pola
HTML
<input id="rsa_n" name="n" value="B.....9" type="hidden">
<input id="rsa_e" name="e" value="10001" type="hidden">


Rozszerzenia ts_dialogin natomiast wywołuje logowanie następująco:
JAVASCRIPT
jQuery.post(location.href,post_data,function(data,textStatus,xmlHttpRequest) {
                ...................
		},'json');


parametry post_data wyglądją tak:
JAVASCRIPT
post_data = {
			type: this.options.page_type,
			logintype: 'login',
			pid: this.options.storagePID,
			redirect_url: '',
			user: this.form.username.val(),
			pass: this.form.password.val()
		};


Jak to najłatwiej sprzęgnąć ze sobą? Co to za pola rsa_n i rsa_e? Jak je wygenerować? A może coś źle kombinuję?
Napisane: 09.12.2013 [18:41]
kss
zarejestrowany: 19.07.2007
Posty: 1341
Wygenerują je za Ciebie : )
Musisz tlyko w swojej wtyczce umieścić
PHP
$extraHiddenAr = array();
$onSubmitAr = array();
if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['felogin']['loginFormOnSubmitFuncs'])) {
	$_params = array();
	foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['felogin']['loginFormOnSubmitFuncs'] as $funcRef) {
	list($onSub, $hid) = t3lib_div::callUserFunction($funcRef, $_params, $this);
	$onSubmitAr[] = $onSub;
	$extraHiddenAr[] = $hid;
	}
}


$onSubmitAr będzie zawierać kod, który msusisz wstawić do <form onSubmit="..">
$extraHiddenAr będzie zawierać JS niezbędny do zadziałania całego mechanizmu szyfrowania hasła.

=======================================
t33k
Napisane: 13.12.2013 [16:20]
djgregor
Twórca tematu
zarejestrowany: 19.08.2013
Posty: 8
Wielkie dzięki za odzew!

Ok, źle/nieprecyzyjnie to wszystko opisałem...

Sposób logowania felogin podałem jako przykład.

Wtyczka którą zainstalowałem (ts_dialogin) wywołuje logowanie przez POST w JS:

JAVASCRIPT
post_data = {
			type: this.options.page_type,
			logintype: 'login',
			pid: this.options.storagePID,
			redirect_url: '',
			user: this.form.username.val(),
			pass: this.form.password.val()
		};
jQuery.post(location.href,post_data,function(data,textStatus,xmlHttpRequest) {
                ...................
		},'json');


Rozumiem więc na podstawie tego jak działa wtyczka felogin, że powinienem wygenerować zmienne n i e odpowiadające polom <input id="rsa_n" name="n"... oraz <input id="rsa_e" name="e"... o odpowiednich wartościach, a potem wywołać jakoś funkcję tx_rsaauth_feencrypt(form) (przed POSTem), tylko że parametrem nie powinien być formularz, a password oraz te dodatkowe zmienne. Tak to jakoś zrozumiałem, aczkolwiek nie wiem czy dobrze.

Więc nie wiem jak wygenerować wartość tych dodatkowych pól i jak zmienić funkcję tx_rsaauth_feencrypt(form). A może lepsze byłoby jakieś inne podejście?