void ChangePasswordCommand::watcher() { disableNotifiers(); if ( gg_pubdir_watch_fd( session_ ) == -1 ) { gg_change_passwd_free( session_ ); emit error( i18n( "Connection Error" ), i18n( "Password changing finished prematurely due to a connection error." ) ); done_ = true; deleteLater(); return; } if ( session_->state == GG_STATE_ERROR ) { gg_free_change_passwd( session_ ); emit error( i18n( "State Error" ), i18n( "Password changing finished prematurely due to a session related problem (try again later)." ) ); done_ = true; deleteLater(); return; } if ( session_->state == GG_STATE_DONE ) { emit done( i18n( "Changed Password" ), i18n( "Your password has been changed." ) ); gg_free_change_passwd( session_ ); done_ = true; deleteLater(); return; } enableNotifiers( session_->check ); }
void GaduPubdirSocketNotifiers::socketEvent() { kdebugf(); if (gg_pubdir_watch_fd(H) == -1) { finished(false); return; } struct gg_pubdir *p = (struct gg_pubdir *)H->data; switch (H->state) { case GG_STATE_CONNECTING: kdebugmf(KDEBUG_NETWORK | KDEBUG_INFO, "changing QSocketNotifiers\n"); watchFor(H); break; case GG_STATE_ERROR: kdebugmf(KDEBUG_NETWORK | KDEBUG_INFO, "error!\n"); finished(false); break; case GG_STATE_DONE: if (p->success) kdebugmf(KDEBUG_NETWORK | KDEBUG_INFO, "success!\n"); else kdebugmf(KDEBUG_NETWORK | KDEBUG_INFO, "error!\n"); finished(p->success); break; } kdebugf2(); }
/** * Funkcja wywoływana po zaobserwowaniu zmian na deskryptorze połączenia. * * Operacja będzie zakończona, gdy pole \c state będzie równe \c GG_STATE_DONE. * Jeśli wystąpi błąd, \c state będzie równe \c GG_STATE_ERROR, a kod błędu * znajdzie się w polu \c error. * * \note W rzeczywistości funkcja jest makrem rozwijanym do * \c gg_pubdir_watch_fd(). * * \param h Struktura połączenia * * \return 0 jeśli się powiodło, -1 w przypadku błędu * * \ingroup remind */ int gg_remind_watch_fd(struct gg_httpd *h) { return gg_pubdir_watch_fd(h); }
/** * Rejestruje nowego użytkownika. * * Wymaga wcześniejszego pobrania tokenu za pomocą \c gg_token(). * * \param email Adres e-mail * \param password Hasło * \param tokenid Identyfikator tokenu * \param tokenval Zawartość tokenu * \param async Flaga połączenia asynchronicznego * * \return Struktura \c gg_http lub \c NULL w przypadku błędu * * \ingroup register */ struct gg_http *gg_register3(const char *email, const char *password, const char *tokenid, const char *tokenval, int async) { struct gg_http *h; char *__pwd, *__email, *__tokenid, *__tokenval, *form, *query; if (!email || !password || !tokenid || !tokenval) { gg_debug(GG_DEBUG_MISC, "=> register, NULL parameter\n"); errno = EFAULT; return NULL; } __pwd = gg_urlencode(password); __email = gg_urlencode(email); __tokenid = gg_urlencode(tokenid); __tokenval = gg_urlencode(tokenval); if (!__pwd || !__email || !__tokenid || !__tokenval) { gg_debug(GG_DEBUG_MISC, "=> register, not enough memory for form fields\n"); free(__pwd); free(__email); free(__tokenid); free(__tokenval); return NULL; } form = gg_saprintf("pwd=%s&email=%s&tokenid=%s&tokenval=%s&code=%u", __pwd, __email, __tokenid, __tokenval, gg_http_hash("ss", email, password)); free(__pwd); free(__email); free(__tokenid); free(__tokenval); if (!form) { gg_debug(GG_DEBUG_MISC, "=> register, not enough memory for form query\n"); return NULL; } gg_debug(GG_DEBUG_MISC, "=> register, %s\n", form); query = gg_saprintf( "Host: " GG_REGISTER_HOST "\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "User-Agent: " GG_HTTP_USERAGENT "\r\n" "Content-Length: %d\r\n" "Pragma: no-cache\r\n" "\r\n" "%s", (int) strlen(form), form); free(form); if (!query) { gg_debug(GG_DEBUG_MISC, "=> register, not enough memory for query\n"); return NULL; } if (!(h = gg_http_connect(GG_REGISTER_HOST, GG_REGISTER_PORT, async, "POST", "/appsvc/fmregister3.asp", query))) { gg_debug(GG_DEBUG_MISC, "=> register, gg_http_connect() failed mysteriously\n"); free(query); return NULL; } h->type = GG_SESSION_REGISTER; free(query); h->callback = gg_pubdir_watch_fd; h->destroy = gg_pubdir_free; if (!async) gg_pubdir_watch_fd(h); return h; }
/** * Wysyła hasło użytkownika na e-mail. * * Wymaga wcześniejszego pobrania tokenu za pomocą \c gg_token(). * * \param uin Numer Gadu-Gadu * \param email Adres e-mail (podany przy rejestracji) * \param tokenid Identyfikator tokenu * \param tokenval Zawartość tokenu * \param async Flaga połączenia asynchronicznego * * \return Struktura \c gg_http lub \c NULL w przypadku błędu * * \ingroup remind */ struct gg_http *gg_remind_passwd3(uin_t uin, const char *email, const char *tokenid, const char *tokenval, int async) { struct gg_http *h; char *form, *query, *__tokenid, *__tokenval, *__email; if (!tokenid || !tokenval || !email) { gg_debug(GG_DEBUG_MISC, "=> remind, NULL parameter\n"); errno = EFAULT; return NULL; } __tokenid = gg_urlencode(tokenid); __tokenval = gg_urlencode(tokenval); __email = gg_urlencode(email); if (!__tokenid || !__tokenval || !__email) { gg_debug(GG_DEBUG_MISC, "=> remind, not enough memory for form fields\n"); free(__tokenid); free(__tokenval); free(__email); return NULL; } if (!(form = gg_saprintf("userid=%d&code=%u&tokenid=%s&tokenval=%s&email=%s", uin, gg_http_hash("u", uin), __tokenid, __tokenval, __email))) { gg_debug(GG_DEBUG_MISC, "=> remind, not enough memory for form fields\n"); free(__tokenid); free(__tokenval); free(__email); return NULL; } free(__tokenid); free(__tokenval); free(__email); gg_debug(GG_DEBUG_MISC, "=> remind, %s\n", form); query = gg_saprintf( "Host: " GG_REMIND_HOST "\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "User-Agent: " GG_HTTP_USERAGENT "\r\n" "Content-Length: %d\r\n" "Pragma: no-cache\r\n" "\r\n" "%s", (int) strlen(form), form); free(form); if (!query) { gg_debug(GG_DEBUG_MISC, "=> remind, not enough memory for query\n"); return NULL; } if (!(h = gg_http_connect(GG_REMIND_HOST, GG_REMIND_PORT, async, "POST", "/appsvc/fmsendpwd3.asp", query))) { gg_debug(GG_DEBUG_MISC, "=> remind, gg_http_connect() failed mysteriously\n"); free(query); return NULL; } h->type = GG_SESSION_REMIND; free(query); h->callback = gg_pubdir_watch_fd; h->destroy = gg_pubdir_free; if (!async) gg_pubdir_watch_fd(h); return h; }
/** * Funkcja wywoływana po zaobserwowaniu zmian na deskryptorze połączenia. * * Operacja będzie zakończona, gdy pole \c state będzie równe \c GG_STATE_DONE. * Jeśli wystąpi błąd, \c state będzie równe \c GG_STATE_ERROR, a kod błędu * znajdzie się w polu \c error. * * \note W rzeczywistości funkcja jest makrem rozwijanym do * \c gg_pubdir_watch_fd(). * * \param h Struktura połączenia * * \return 0 jeśli się powiodło, -1 w przypadku błędu * * \ingroup passwd */ int gg_change_passwd_watch_fd(struct gg_httpd *h) { return gg_pubdir_watch_fd(h); }
/** * Funkcja wywoływana po zaobserwowaniu zmian na deskryptorze połączenia. * * Operacja będzie zakończona, gdy pole \c state będzie równe \c GG_STATE_DONE. * Jeśli wystąpi błąd, \c state będzie równe \c GG_STATE_ERROR, a kod błędu * znajdzie się w polu \c error. * * \note W rzeczywistości funkcja jest makrem rozwijanym do * \c gg_pubdir_watch_fd(). * * \param h Struktura połączenia * * \return 0 jeśli się powiodło, -1 w przypadku błędu * * \ingroup unregister */ int gg_unregister_watch_fd(struct gg_httpd *h) { return gg_pubdir_watch_fd(h); }
/* * gg_change_passwd4() * * wysy³a ¿±danie zmiany has³a zgodnie z protoko³em GG 6.0. wymaga * wcze¶niejszego pobrania tokenu za pomoc± funkcji gg_token(). * * - uin - numer * - email - adres e-mail * - passwd - stare has³o * - newpasswd - nowe has³o * - tokenid - identyfikator tokenu * - tokenval - warto¶æ tokenu * - async - po³±czenie asynchroniczne * * zaalokowana struct gg_http, któr± po¼niej nale¿y zwolniæ * funkcj± gg_change_passwd_free(), albo NULL je¶li wyst±pi³ b³±d. */ struct gg_http *gg_change_passwd4(uin_t uin, const char *email, const char *passwd, const char *newpasswd, const char *tokenid, const char *tokenval, int async) { struct gg_http *h; char *form, *query, *__email, *__fmpwd, *__pwd, *__tokenid, *__tokenval; if (!uin || !email || !passwd || !newpasswd || !tokenid || !tokenval) { gg_debug(GG_DEBUG_MISC, "=> change, NULL parameter\n"); errno = EINVAL; return NULL; } __fmpwd = gg_urlencode(passwd); __pwd = gg_urlencode(newpasswd); __email = gg_urlencode(email); __tokenid = gg_urlencode(tokenid); __tokenval = gg_urlencode(tokenval); if (!__fmpwd || !__pwd || !__email || !__tokenid || !__tokenval) { gg_debug(GG_DEBUG_MISC, "=> change, not enough memory for form fields\n"); free(__fmpwd); free(__pwd); free(__email); free(__tokenid); free(__tokenval); errno = ENOMEM; return NULL; } if (!(form = gg_saprintf("fmnumber=%d&fmpwd=%s&pwd=%s&email=%s&tokenid=%s&tokenval=%s&code=%u", uin, __fmpwd, __pwd, __email, __tokenid, __tokenval, gg_http_hash("ss", email, newpasswd)))) { gg_debug(GG_DEBUG_MISC, "=> change, not enough memory for form fields\n"); free(__fmpwd); free(__pwd); free(__email); free(__tokenid); free(__tokenval); errno = ENOMEM; return NULL; } free(__fmpwd); free(__pwd); free(__email); free(__tokenid); free(__tokenval); gg_debug(GG_DEBUG_MISC, "=> change, %s\n", form); query = gg_saprintf( "Host: " GG_REGISTER_HOST "\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "User-Agent: " GG_HTTP_USERAGENT "\r\n" "Content-Length: %d\r\n" "Pragma: no-cache\r\n" "\r\n" "%s", (int) strlen(form), form); free(form); if (!(h = gg_http_connect(GG_REGISTER_HOST, GG_REGISTER_PORT, async, "POST", "/appsvc/fmregister3.asp", query))) { gg_debug(GG_DEBUG_MISC, "=> change, gg_http_connect() failed mysteriously\n"); free(query); return NULL; } h->type = GG_SESSION_PASSWD; free(query); h->callback = gg_pubdir_watch_fd; h->destroy = gg_pubdir_free; if (!async) gg_pubdir_watch_fd(h); return h; }
/* * gg_unregister3() * * usuwa konto u¿ytkownika z serwera protoko³em GG 6.0 * * - uin - numerek GG * - password - has³o klienta * - tokenid - identyfikator tokenu * - tokenval - warto¶æ tokenu * - async - po³±czenie asynchroniczne * * zaalokowana struct gg_http, któr± po¼niej nale¿y zwolniæ * funkcj± gg_unregister_free(), albo NULL je¶li wyst±pi³ b³±d. */ struct gg_http *gg_unregister3(uin_t uin, const char *password, const char *tokenid, const char *tokenval, int async) { struct gg_http *h; char *__fmpwd, *__pwd, *__tokenid, *__tokenval, *form, *query; if (!password || !tokenid || !tokenval) { gg_debug(GG_DEBUG_MISC, "=> unregister, NULL parameter\n"); errno = EINVAL; return NULL; } __pwd = gg_saprintf("%ld", random()); __fmpwd = gg_urlencode(password); __tokenid = gg_urlencode(tokenid); __tokenval = gg_urlencode(tokenval); if (!__fmpwd || !__pwd || !__tokenid || !__tokenval) { gg_debug(GG_DEBUG_MISC, "=> unregister, not enough memory for form fields\n"); free(__pwd); free(__fmpwd); free(__tokenid); free(__tokenval); errno = ENOMEM; return NULL; } form = gg_saprintf("fmnumber=%d&fmpwd=%s&delete=1&pwd=%s&[email protected]&tokenid=%s&tokenval=%s&code=%u", uin, __fmpwd, __pwd, __tokenid, __tokenval, gg_http_hash("ss", "*****@*****.**", __pwd)); free(__fmpwd); free(__pwd); free(__tokenid); free(__tokenval); if (!form) { gg_debug(GG_DEBUG_MISC, "=> unregister, not enough memory for form query\n"); errno = ENOMEM; return NULL; } gg_debug(GG_DEBUG_MISC, "=> unregister, %s\n", form); query = gg_saprintf( "Host: " GG_REGISTER_HOST "\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "User-Agent: " GG_HTTP_USERAGENT "\r\n" "Content-Length: %d\r\n" "Pragma: no-cache\r\n" "\r\n" "%s", (int) strlen(form), form); free(form); if (!(h = gg_http_connect(GG_REGISTER_HOST, GG_REGISTER_PORT, async, "POST", "/appsvc/fmregister3.asp", query))) { gg_debug(GG_DEBUG_MISC, "=> unregister, gg_http_connect() failed mysteriously\n"); free(query); return NULL; } h->type = GG_SESSION_UNREGISTER; free(query); h->callback = gg_pubdir_watch_fd; h->destroy = gg_pubdir_free; if (!async) gg_pubdir_watch_fd(h); return h; }