Zmiany w GGAPI

Na przełomie lipca i sierpnia wprowadzimy kilka zmian w GGAPI. Zasoby będą operować na nowych identyfikatorach użytkowników zamiast na numerach GG. Prosimy twórców o kontakt na adres dev@gadu-gadu.pl jeśli ich aplikacje przechowują w swoich bazach danych numery GG.

Zmiany mają na celu przygotowanie aplikacji do nowej odsłony systemu aplikacji zewnętrznych, nad którym intensywnie pracujemy.

Autor Przemek Łącki, 20/07/2011, w GG.pl, GGAPI 1 Komentarz »

Aktualizacja funkcjonalności – lista nowości na GG.pl

Changelog GG.pl:

  • dodano obsługę nowych typów kontaktów na liście kontaktów (email, telefon),
  • zmieniono sposób dodawania i edycji kontaktów na liście kontaktów,
  • dodano zakładkę gry w profilu użytkownika,
  • poprawiono błąd z interpretacją w szczególnych przypadkach składkowych adresu URL jako emotikonę,
  • poprawiono błąd z budowaniem adresu przekierowania dla IE,
  • poprawiono mechanizm nawiązywania połączeń po HTTP,
  • poprawiono obsługę maskowania ekranu,
  • dodano poprawki dla głównych przeglądarek,
  • dodano obsługę profilów 18 lat,
  • dodano profile publiczne użytkowników,
  • dodano profile publiczne grup,
  • dodano nową odsłonę katalogu aplikacji.

Changelog Aplikacje Grupy:

  • poprawiono wyświetlanie długich nazw grup,
  • liczne poprawki stylowe dla głównych przeglądarek,
  • dodano liczniki nowych wypowiedzi, uczestników, forum,
  • dodano główny licznik aplikacyjny dla GG.pl.
Autor Michał Abram, 04/04/2011, w GG.pl 1 Komentarz »

Integracja aplikacji Ruby on Rails 3 z platformą GGAPI

W dzisiejszym gościnnym wpisie Marcin 'Martio' Lewandowski opisze sposób integracji aplikacji RoR z platformą GGAPI:


Do zintegrowania aplikacji Rails'owej z platformą Gadu-Gadu zastosujemy uniwersalny i elastyczny system uwierzytelniania z wykorzystaniem Rack Middleware o nazwie OmniAuth (https://github.com/intridea/omniauth).

Zaczynamy od zainstalowania niezbędnych gem-ów. W pliku Gemfile dodajemy dwa nowe gem-y:

gem 'oauth2'
gem 'omniauth'

i wykonujemy polecenie `bundle install`.

Kiedy posiadamy już niezbędne biblioteki w naszej aplikacji możemy przystąpić do integracji i właściwej konfiguracji adaptera OmniAuth. Biblioteka ta wprawdzie nie posiada w standardowym wydaniu adaptera strategii uwierzytelniania dla Gadu-Gadu, ale takowy znajdziemy również na Github-ie pod adresem: https://gist.github.com/8e82aabe6de2cb090121.
Klonujemy plik adaptera będąc w katalogu `lib` poleceniem

git clone git@gist.github.com:8e82aabe6de2cb090121.git

lub ściągamy ręcznie z podanej strony. Adapter przystosowany jest do biblioteki OmniAuth w wersji 0.1.6.

Konfiguracja jest banalnie prosta i polega na dodaniu nowego inicjatora. Tworzymy nowy
plik `config/initializers/omniauth.rb` o następującej zawartości:

module OmniAuth
  module Strategies
    autoload :GG, 'gg_omniauth_strategy'
  end
end

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :GG, CLIENT_ID, CLIENT_SECRET
end

W ten oto prosty i szybki sposób zintegrowaliśmy naszą aplikację z platformą Gadu-Gadu. Dla pełnej satysfakcji brakuje nam jeszcze kontrolera, który obsłuży zautoryzowanych użytkowników GG.

Dodajemy dwie nowe trasy do konfiguracji routingu w pliku `config/routes.rb`:

match '/auth/:provider/callback' => 'authentications#create'
match '/auth/failure' => 'authentications#failure'

Ostatnim krokiem jest utworzenie kontrolera `app/controllers/authentications_controller.rb`:

class AuthenticationsController < ApplicationController
  rescue_from User::NotAuthorized, :with => :user_not_authorized

  def create
    omniauth = request.env['omniauth.auth']

    raise User::NotAuthorized unless omniauth['uid']

    user = User.find_by_uid(omniauth['uid'])

    unless user
      user = User.new
      user.uid     = omniauth['uid']
      user.name    = omniauth['user_info'][(!omniauth['user_info']['nickname'].empty?
                                                               ? 'nickname' : 'name')]
      user.picture = "http://avatars.gg.pl/#{omniauth['uid']}"
      raise User::NotAuthorized unless user.save
    end

    session['uid']   = user.id
    session['token'] = omniauth['credentials']['token']

    redirect_to_after_authentication
  end

  def failure
    user_not_authorized
  end

  protected

  def redirect_to_after_authentication
    render :text => "<script type='text/javascript' charset='utf-8'>top.location.href =
'http://www.gg.pl/#apps/MY_APP';</script>"
  end

  def user_not_authorized
    render :text => '401 Unauthorized', :status => 401
  end
end

Podczas uwierzytelnienia zachowaliśmy w sesji access_token, który wykorzystujemy do autoryzacji dostępu do API. Teraz pobranie np. listy kontaktów zautoryzowanego użytkownika to nic prostszego. Wystarczy tylko skorzystać z klienta OAuth2:

@client = OAuth2::Client.new(CLIENT_ID, CLIENT_SECRET, :parse_json => true)
@token  = OAuth2::AccessToken.new(@client, session['token'])
result  = @token.get('https://users.api.gg.pl/friends/me', {:limit => 1000},
{'Accept-Charset' => 'ISO-8859-2,utf-8;q=0.7,*;q=0.7'})

Na koniec jeszcze jedna bardzo ważna uwaga. Uwierzytelnienie w bibliotece OmniAuth następuje po przekierowaniu użytkownika na URL `/auth/gg`. Jako, że w panelu administracyjnym aplikacji nie możemy ustawić tego typu URL-a celem ustandaryzowania automatycznego przekierowania użytkownika do procesu uwierzytelnienia jego dostępu do naszej aplikacji, możemy zastosować pewien trick używając ponownie Rack Middleware.

Tworzymy klasę odpowiedzialną za wykrycie żądania pochodzącego z platformy Gadu-Gadu `lib/detect_platform.rb`:

class DetectPlatform
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)

    if request.params['gg_session_id']
      request.env[:request_comes_from_platform] = :gg
    end

    @app.call(env)
  end
end

i rejestrujemy ją w utworzonym wcześniej inicjatorze:

require 'detect_platform'
Rails.application.config.middleware.use DetectPlatform

Od teraz możemy wykryć w głównym kontrolerze czy żądanie pochodzi z platformy Gadu-Gadu i w razie takiej potrzeby przekierować użytkownika do systemu uwierzytelnienia.

class HomeController < ApplicationController
  before_filter :check_authorization

  def show
  end

  private

  def check_authorization
    render :text => '403 Forbidden', :status =>
           403 unless request.env[:request_comes_from_platform]
    render :text => "<script type='text/javascript' charset='utf-8'>top.location.href =
       '#{request.protocol}#{request.host_with_port}/auth/gg';</script>" unless session['uid']
  end
end
Autor Przemek Łącki, 10/02/2011, w API, GG.pl, GGAPI Brak Komentarzy »

Poprawiono bezpieczeństwo serwisu GG.pl w odpowiedzi na zgłoszenie użytkownika

Użytkownicy serwisu społecznościowego GG.pl mogą od dzisiaj korzystać z poprawionej wersji. Administratorzy serwisu wprowadzili poprawkę poprawiającą prywatność użytkowników. Lukę usunięto po zgłoszeniu jej przez jednego z użytkowników GG, Karola Olszackiego - http://olszak.tk/pl/ . Mogła ona umożliwiać innym osobom dostęp do wpisów na tzw. pulpicie serwisu.

Karol otrzyma w podziękowaniu prezent od GG Network.

- Dziękujemy za zgłoszenie błędu – mówi Zbigniew Pieńkowski, CIO GG Network S.A. – Prywatność użytkowników jest naszym jednym z głównych priorytetów. Dlatego każde takie zgłoszenie rozpatrujemy z pełną powagą. Przy tak dynamicznie rozwijającym się serwisie w skali społeczności GG.pl zawsze mogą zdarzać się jakieś potknięcia, ale najważniejsze, żeby je skutecznie usuwać. Wszelkie uwagi, błędy można zgłaszać na beta@gadu-gadu.pl

***

Serwis społecznościowy GG.pl

Serwis GG.pl jest silnie zintegrowany z Gadu-Gadu, najpopularniejszym komunikatorem w Polsce, z którego korzysta obecnie już blisko 11 milionów użytkowników miesięcznie.

Osoby komunikujące się na co dzień przez Gadu-Gadu, uzyskują dzięki serwisowi GG.pl wiele nowych funkcjonalności. Użytkownicy mogą m.in. wymieniać się linkami, tworzyć prywatne konferencje ze znajomymi, słuchać muzyki, komunikować się za pomocą poczty e-mail, komunikatora czy grać w ulubione gry. Wszystko to opiera się o relacje ze znajomymi z listy kontaktów z komunikatora – są to zwykle osoby bliskie, z którymi łączą nas codzienne.

Serwis rozwija się w oparciu o sugestie, pomysły i oczekiwania użytkowników.

www.GG.pl

Autor Michał Abram, 10/01/2011, w GG.pl, GGAPI Brak Komentarzy »
Copyright © GG Network S.A.
Engine by Wordpress
Aktualności RSS