Zintegrowane logowanie cms z forum

Feb 06

Zintegrowane logowanie cms z forum

Projektowałem wiele serwisów, które miały zintegrowane z forum komponenty takie jak:

  • rejestracja,
  • przypomnienie hasła,
  • zmiana hasła, nicku lub adresu email,
  • usunięcie konta.

Wówczas nie było żadnego problemu – wystarczyło wszystkie te akcje z forum przekierować na URL’e obsługiwane przez CMS, który zajmował się zmianami  tabelach forum. Dlaczego przekierować? Jeżeli ktoś rejestruje się w serwisie, jest zarejestrowany na forum, natomiast, gdy rejestruje się na forum, nie jest rejestrowany w serwisie. To CMS integrujemy z forum, a nie forum z CMS’em (chyba, że zamierzamy inaczej, wtedy na odwrót).

Ostatnio klient zażyczył sobie, żeby zintegrowane było również logowanie. Nie najlepiej widzi mi się implementacja systemu autoryzacji z forum w CMS’ie, więc poszedłem “na łatwiznę”, bowiem miałem do czynienia z phpBB. Do osiągnięcia celu postanowiłem wykonać dwa kroki:

  1. wysłać żądanie POST do forum na adres logowania z wypełnionymi polami POST z formularza logowania w CMS’ie,
  2. przechwycić wysłane przez forum ciasteczka i przekazać je użytkownikowi.

Do połączenia się z forum via http użyłem HttpRequest. Wyszło z tego parę linijek kodu.

Read More

Upload filmów z Zend_Gdata_YouTube

Dec 20

Pisząc nowy projekt natknąłem na problem z procesem uploadu filmiku do serwisu YouTube. Sam upload jest bardzo łatwy do napisania z Zend_Gdata_YouTubeprzykład można znaleźć w manualu. Myślę, że zainteresowani przeczytają manual i wszystko będzie jasne. Więc jeżeli to takie proste, to w czym problem?

Zakładamy, że userzy uloadują filmiki bezpośrednio na nasz serwis. Nasz serwer ma za zadanie:

  1. Skompresować video i zapisać go w formacie flv.
  2. Nałożyć watermark.
  3. Wysłać obrobiony film do serwisu Youtube logując się na zdefiniowane przez użytkownika konto lub założone przez administratora strony.

Pierwsze 2 kroki wykonają się błyskawicznie w porównaniu do trzeciego. Kompresja i nałożenie watermarku na 30 megowy plik z wykorzystaniem FFMPEG to nic nadzwyczajnego. Natomiast wysyłka pliku na serwery Youtube’a może zawiesić apache’a, gdy jest ich kilka.

Rozwiązanie? Wpadłem na pomysł, aby upload filmików ustawiony był w pewnego rodzaju kolejce, która uruchamiana by była co minutę (cron), a czas jednego wysłania elemntu nie mógłby przekroczyć 50 sekund. Oczywiście takie działanie uruchamiałoby swój osobny proces apache’a. Ten sposób jest ograniczony dwoma limitami: wielkością pliku oraz czasem jego uploadu na serwer (jednocześniem interwałem uruchamiania kolejki).

Read More

Videoblog?

Dec 14

Ostatnio przeglądając sieć, natknąłem się na parę osób prowadzących videobloga. Wobec tego szukam serwisu, który oferuje założenie wideobloga za darmo. O dziwo – w Polsce nie ma takiego czegoś. Wpadł mi do głowy pomysł, że możnaby spróbować wykonać i wypromować coś takiego.

Idąc dalej… nie posiadam serwera, który mógłby pozwolić sobie na hostowanie plików video. Nie posiadam również pieniędzy na taki serwer. Mogłoby się wydawać, że nici z mojego pomysłu, ale przypomniałem sobie, że można do tego wykorzystać YouTube’a. Sami oferują API share’owania plików video. Z pomocą przychodzi również Zend Framework z komponentem Zend_Gdata_Youtube. Dlaczego by nie wykorzystać tego API? Użytkownicy mogliby podawać loginy i hasła do swoich kont youtube/google accounts, żeby notki w formie klipów video lądowały w ich profilu.

Tylko czy taki serwis się przyjmie? Nie mam pojęcia, ale wiem jedno – warto zaryzykować. Póki nie przyjdzie firma, która ma więcej pieniędzy i zrobi to lepiej, spróbują małymi kroczkami zbudować serwis.

Święta nadchodzą, mase wolnego czasu… działamy :)

Read More

Milion na StartUp

Sep 09

Portal Money.pl wyznaczył swoja nową akcję nad akcją Milion na StartUp (milion-na-startup.pl) widząc, co się dzieje w Internecie.

W ostatnich latach w Polsce powstały dziesiątki nowych, obiecujących przedsięwzięć internetowych. Ta branża staje się szansą dla młodych ludzi na uruchomienie własnego biznesu. Internet kreuje nowe potrzeby, nowe usługi, nowe trendy. Money.pl – portal finansowy nr 1 – ogłasza akcję na najlepszy biznesplan. Oferujemy milion złotych z naszej puli inwestycyjnej na realizację pomysłu na serwis lub usługę internetową. Na projekty czekamy do 30 listopada 2008 r. Zapoznaj się z ideą i zasadami naszej akcji.

Podobną akcję ogłosił TVN24.pl, tym razem pod tytułem Nowy Biznes (nowybiznes.tvn24.pl).

Razem z ekipą mamy zamiar zgłosić nasz projekt Ocenpizze.pl (oraz subprojekty), który ma na celu zrzeszyć pizzerie w całej Polsce.

Read More

Gokart

Sep 01

Dziś o 9:02am wydano na mnie wyrok chodzenia do szkoły. W związku z tym mam nowe postanowienia i zrealizuje moje marzenie z dzieciństwa. Razem z dwoma moimi kolegami z osiedla budujemy gokarta.

Jednymi z trudności jego budowy jest to, że:

  • kompletnie się na tym nie znamy, w życiu nie mieliśmy styczności ze strukturą samochodów itp;
  • projekt będzie wykonany samodzielnie, w grę nie wchodzą żadne gotowe plany i projekty gokarta,
  • trudne jest skompletowanie części do gokarta,
  • mieszkamy w mieście, nie na wsi – trudno o wolny warsztat pracy wraz z narzędziami.

Projekt posiada witrynę internetową, gdzie będziemy publikować postęp prac i szczegółowe (jak na nasze oko) plany techniczne, które zostaną oddane w ręce specjalistów (spawaczy, ślusarzy) aby zmontowali ramę i wykonali precyzyjne otwory. Strona internetowa powstała po to, żeby ułatwić pracę innym pasjonatom, mało w sieci bardzo szczegółowych planów i prostego przekazu jak zbudować gokarta. Dlatego też postaramy się wypozycjonować stronę, czemu służy m.in. ten wpis.

Wstępnie gokart:

  • ma rozpędzać się do Vmax ~50-70 km/h,
  • wszystkie jego elementy muszą być maksymalnie wymienialne (części układu sterowania, układu napędowego – w tym i samego wała, części składowe ramy, tj. zwrotnice, siedzenie, zderzaki),
  • powinien być bezpieczny.

No nic… zabieramy się do pracy. Na blogu gokarta na bieżąco będą widniały informacje o ostępie prac.

Read More

Weryfikacja właściciela strony

Aug 17

Niedługo być może zaimplementuje w jeden z moich nowych projektów weryfikację właściciela strony. Pomysł pozwoliłem zrobię zaczerpnąć z Google Webmaster Tool. Natomiast troszeczkę zmieniłem jeden ze sposobów, aby mniej się napracować. Zweryfikowanie właściciela witryny odbywa się po wywołaniu jednej z poniższych metod. Oto one:

  • Weryfikacja poprzez upload pliku na serwer.
  • Chwilowe dodanie meta-tagu do sekcji HEAD.

W stosunku do google, zmianie uległa u mnie weryfikacja pierwsza.

Sposób Google: Upload pliku bez zawartości (lub z dowolną) o nazwie jako hash aktywacyjny, np: <?php md5( secret-salt ) . '.html'; ?>

Mój sposób: Upload pliku ze stałą lub hashowaną nazwą o zawartości 32 znakowego hashu md5.

Zmienia się tylko zawartość pliku. Dlaczego? Niektóre strony zamiast zwracać kod 404 dla nieistniejących plików/podstron zwracają kod 200 (sukces). Wówczas trudno stwierdzić, czy jest to oczekiwany plik. Google dodatkowo sprawdza, czy strona zawsze zwraca kod 200, ale po co się babrać i wykonywać więcej requestów, jak można zrobić to trochę prościej. Jeżeli plik nie będzie fizycznie istniał na serwerze, a strona zwróci kod 200, skrypt musi oczekiwać w odpowiedzi tylko i wyłącznie hashu strony. Nazwa pliku na serwerze może być stała, ale niekoniecznie (dla większego bezpieczeństwa zalecane jest logiczne hashowanie nazwy pliku).

Przygotujmy zatem zarys klasy (od tego zawsze zaczynam):

  • public function CheckFile($sUrl, $sFilename) funkcja sprawdzająca hash w pliku na serwerze.
  • public function CheckMetatag($sUrl, $sTagName) funkcja sprawdzająca hash w metatagu.
  • public static function Hash($sUrl) funkcja budująca hash na postawie adresu URL (jako że podajemy go jako parametr obu metod sprawdzających, zmienna jest łatwo dostępna dla systemu).
  • public static function Metatag($sHash, $sTagName) generowanie kodu XHTML dla metatagu – metoda potrzebna nam przy podaniu użytkownikowi meta tagu oraz do prega w metodzie CheckMetatag();
  • protected static function _Request($sUrl) tworzenie requestu za pomocą HttpRequest i zwracanie treści metodą getResponseBody() wspomnianej klasy.

Jako że komponent jest niejako zewnętrzną biblioteką, nie mogłem go wcisnąć w komponentu frameworka. Otrzymał status biblioteki: VframeLib_WebVeryfication.

Oczekiwane API:

var_dump(VframeLib_WebVeryfication::CheckFile('http://example.com/', 'Veryfication.txt')); // bool result
var_dump(VframeLib_WebVeryfication::CheckMetatag('http://example.com/', 'Veryfication'));
// bool result

Gotowy kod:

http://athlan.pl/code/VframeLib_WebVeryfication

Uwaga. Kod jest w fazie testowej. Wszelkie Wasze komentarze będą uwzględniane przy poprawkach.

Read More