Merge branch 'master' of github.com:diaspora/diaspora
This commit is contained in:
commit
ec4c63ada7
46 changed files with 185 additions and 83 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -19,3 +19,4 @@ bin/*
|
|||
nbproject
|
||||
config/initializers/secret_token.rb
|
||||
public/source.tar
|
||||
config/fb_config.yml
|
||||
|
|
|
|||
16
README.md
16
README.md
|
|
@ -18,13 +18,11 @@ instructions.
|
|||
You are welcome to contribute, add to and extend Diaspora however you see fit. We
|
||||
will do our best to incorporate everything that meets our guidelines.
|
||||
|
||||
We need you to fill out a
|
||||
[contributor agreement form](https://spreadsheets.google.com/a/joindiaspora.com/viewform?formkey=dGI2cHA3ZnNHLTJvbm10LUhXRTJjR0E6MQ&theme=0AX42CRMsmRFbUy1iOGYwN2U2Mi1hNWU0LTRlNjEtYWMyOC1lZmU4ODg1ODc1ODI&ifq)
|
||||
before we can accept your patches. The agreement gives Diaspora joint
|
||||
ownership of the patch so the copyright isn't scattered. You can find it
|
||||
[here](https://spreadsheets.google.com/a/joindiaspora.com/viewform?formkey=dGI2cHA3ZnNHLTJvbm10LUhXRTJjR0E6MQ&theme=0AX42CRMsmRFbUy1iOGYwN2U2Mi1hNWU0LTRlNjEtYWMyOC1lZmU4ODg1ODc1ODI&ifq).
|
||||
Please do not rebase our tree into yours.
|
||||
See [here](http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html)
|
||||
for when to rebase.
|
||||
|
||||
All commits must be tested, and after each commit, all tests should be green
|
||||
All commits must be tested, and all your tests should be green
|
||||
before a pull request is sent. Please write your tests in Rspec.
|
||||
|
||||
GEMS: We would like to keep external dependencies unduplicated. We're using
|
||||
|
|
@ -32,6 +30,12 @@ Nokogiri, Mongomapper, and EM::HttpRequest as much as possible. We have a few
|
|||
gems in the project we'd rather not use, but if you can, use dependencies we
|
||||
already have.
|
||||
|
||||
We need you to fill out a
|
||||
[contributor agreement form](https://spreadsheets.google.com/a/joindiaspora.com/viewform?formkey=dGI2cHA3ZnNHLTJvbm10LUhXRTJjR0E6MQ&theme=0AX42CRMsmRFbUy1iOGYwN2U2Mi1hNWU0LTRlNjEtYWMyOC1lZmU4ODg1ODc1ODI&ifq)
|
||||
before we can accept your patches. The agreement gives Diaspora joint
|
||||
ownership of the patch so the copyright isn't scattered. You can find it
|
||||
[here](https://spreadsheets.google.com/a/joindiaspora.com/viewform?formkey=dGI2cHA3ZnNHLTJvbm10LUhXRTJjR0E6MQ&theme=0AX42CRMsmRFbUy1iOGYwN2U2Mi1hNWU0LTRlNjEtYWMyOC1lZmU4ODg1ODc1ODI&ifq).
|
||||
|
||||
## Resources
|
||||
|
||||
We are maintaining a
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class AspectsController < ApplicationController
|
|||
@fb_access_url = MiniFB.oauth_url(FB_APP_ID, APP_CONFIG[:pod_url] + "services/create",
|
||||
:scope=>MiniFB.scopes.join(","))
|
||||
|
||||
@posts = current_user.visible_posts(:public => true).paginate :page => params[:page], :per_page => 15, :order => 'created_at DESC'
|
||||
@posts = current_user.visible_posts(:person_id => current_user.person.id, :public => true).paginate :page => params[:page], :per_page => 15, :order => 'created_at DESC'
|
||||
|
||||
respond_with @aspect
|
||||
end
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ class PhotosController < ApplicationController
|
|||
respond_to :json, :only => :show
|
||||
|
||||
def create
|
||||
album = Album.find_by_id params[:album_id]
|
||||
album = current_user.find_visible_post_by_id( params[:album_id] )
|
||||
|
||||
begin
|
||||
|
||||
######################## dealing with local files #############
|
||||
|
|
|
|||
|
|
@ -28,6 +28,12 @@ class PublicsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def hub
|
||||
if params['hub.mode'] == 'subscribe' || params['hub.mode'] == 'unsubscribe'
|
||||
render :text => params['hub.challenge'], :status => 202, :layout => false
|
||||
end
|
||||
end
|
||||
|
||||
def receive
|
||||
render :nothing => true
|
||||
return unless params[:xml]
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ class UsersController < ApplicationController
|
|||
@user = current_user
|
||||
@person = @user.person
|
||||
@profile = @user.person.profile
|
||||
@photos = Photo.find_all_by_person_id(@person.id).paginate :page => params[:page], :order => 'created_at DESC'
|
||||
@photos = current_user.visible_posts(:person_id => current_user.person.id, :_type => 'Photo').paginate :page => params[:page], :order => 'created_at DESC'
|
||||
|
||||
@fb_access_url = MiniFB.oauth_url(FB_APP_ID, APP_CONFIG[:pod_url] + "services/create",
|
||||
:scope=>MiniFB.scopes.join(","))
|
||||
|
|
@ -49,7 +49,7 @@ class UsersController < ApplicationController
|
|||
director = Diaspora::Director.new
|
||||
ostatus_builder = Diaspora::OstatusBuilder.new(user)
|
||||
|
||||
render :xml => director.build(ostatus_builder)
|
||||
render :xml => director.build(ostatus_builder), :content_type => 'application/atom+xml'
|
||||
else
|
||||
flash[:error] = "User #{params[:username]} does not exist!"
|
||||
redirect_to root_url
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ class Person
|
|||
hcard = HCard.find profile.hcard.first[:href]
|
||||
|
||||
new_person.url = hcard[:url]
|
||||
new_person.profile = Profile.new(:first_name => hcard[:given_name], :last_name => hcard[:family_name])
|
||||
new_person.profile = Profile.new(:first_name => hcard[:given_name], :last_name => hcard[:family_name], :image_url => hcard[:photo])
|
||||
if new_person.save
|
||||
new_person
|
||||
else
|
||||
|
|
|
|||
|
|
@ -13,12 +13,13 @@ class StatusMessage < Post
|
|||
def to_activity
|
||||
<<-XML
|
||||
<entry>
|
||||
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
|
||||
<title>#{self.message}</title>
|
||||
<link rel="alternate" type="text/html" href="#{person.url}status_messages/#{self.id}"/>
|
||||
<id>#{person.url}status_messages/#{self.id}</id>
|
||||
<published>#{self.created_at.xmlschema}</published>
|
||||
<updated>#{self.updated_at.xmlschema}</updated>
|
||||
<title>#{self.message}</title>
|
||||
<link rel="alternate" type="text/html" href="#{person.url}status_messages/#{self.id}"/>
|
||||
<id>#{person.url}status_messages/#{self.id}</id>
|
||||
<published>#{self.created_at.xmlschema}</published>
|
||||
<updated>#{self.updated_at.xmlschema}</updated>
|
||||
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
|
||||
<activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
|
||||
</entry>
|
||||
XML
|
||||
end
|
||||
|
|
|
|||
|
|
@ -167,6 +167,8 @@ class User
|
|||
target_people = target_people | aspect.people
|
||||
}
|
||||
|
||||
push_to_hub(post) if post.respond_to?(:public) && post.public
|
||||
|
||||
push_to_people(post, target_people)
|
||||
end
|
||||
|
||||
|
|
@ -179,10 +181,14 @@ class User
|
|||
end
|
||||
|
||||
def push_to_person( person, xml )
|
||||
Rails.logger.debug("Adding xml for #{self} to message queue to #{url}")
|
||||
QUEUE.add_post_request( person.receive_url, xml )
|
||||
QUEUE.process
|
||||
Rails.logger.debug("Adding xml for #{self} to message queue to #{self.url}")
|
||||
QUEUE.add_post_request( person.receive_url, xml )
|
||||
QUEUE.process
|
||||
end
|
||||
|
||||
def push_to_hub(post)
|
||||
Rails.logger.debug("Pushing update to pubsub server #{APP_CONFIG[:pubsub_server]} with url #{self.public_url}")
|
||||
QUEUE.add_hub_notification(APP_CONFIG[:pubsub_server], self.public_url)
|
||||
end
|
||||
|
||||
def salmon( post )
|
||||
|
|
|
|||
|
|
@ -33,6 +33,12 @@
|
|||
<a href="<%= @person.url%>" rel="me" id="pod_location" class="url"><%= @person.url%></a>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="entity_photo">
|
||||
<dt>Photo</dt>
|
||||
<dd>
|
||||
<span class="photo"><%= @person.profile.image_url%></span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="entity_note">
|
||||
<dt>Note</dt>
|
||||
<dd class="note">Diaspora is awesome! vi is better than emacs!</dd>
|
||||
|
|
|
|||
|
|
@ -5,5 +5,8 @@
|
|||
<Link rel="http://microformats.org/profile/hcard" type="text/html" href="<%=@person.url%>hcard/users/<%=@person.id%>"/>
|
||||
<Link rel="http://joindiaspora.com/seed_location" type = 'text/html' href="<%=@person.url%>"/>
|
||||
<Link rel="http://joindiaspora.com/guid" type = 'text/html' href="<%=@person.id%>"/>
|
||||
|
||||
<Link rel="http://schemas.google.com/g/2010#updates-from" type="application/atom+xml" href="<%=@person.public_url%>"/>
|
||||
|
||||
<Link rel="diaspora-public-key" type = 'RSA' href="<%=Base64.encode64(@person.exported_key)%>"/>
|
||||
</XRD>
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@
|
|||
= owner_image_link
|
||||
- for friend in @friends
|
||||
= person_image_link(friend)
|
||||
- if @logged_in && (@aspect == :public)
|
||||
%h3 Facebook Friends
|
||||
- @fb_friends = MiniFB.get(@access_token, 'me', :type => "friends")
|
||||
- @fb_friends[:data].each do |friend|
|
||||
= image_tag( "http://graph.facebook.com/#{friend[:id]}/picture" )
|
||||
- if @logged_in && (@aspect == :public)
|
||||
%h3 Facebook Friends
|
||||
- @fb_friends = MiniFB.get(@access_token, 'me', :type => "friends")
|
||||
- @fb_friends[:data].each do |friend|
|
||||
= image_tag( "http://graph.facebook.com/#{friend[:id]}/picture" )
|
||||
-unless (@aspect == :all) || (@aspect == :public)
|
||||
= link_to (image_tag('add_friend_button.png', :height => "50px", :width => "50px")), "#add_request_pane", :id => 'add_request_button'
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
|
||||
#submit_block
|
||||
= link_to t('.cancel'), root_path
|
||||
or
|
||||
= t('.or')
|
||||
= f.submit t('.update_profile')
|
||||
|
||||
#content_bottom
|
||||
|
|
|
|||
|
|
@ -5,19 +5,20 @@
|
|||
|
||||
%h2 Services
|
||||
|
||||
%h3 Facebook
|
||||
%p
|
||||
- if @logged_in
|
||||
= connected_fb_as(@access_token)
|
||||
- if FACEBOOK
|
||||
%h3 Facebook
|
||||
%p
|
||||
- if @logged_in
|
||||
= connected_fb_as(@access_token)
|
||||
|
||||
%p
|
||||
- @fb_friends = MiniFB.get(@access_token, 'me', :type => "friends")
|
||||
- @fb_friends[:data].each do |friend|
|
||||
= image_tag( "http://graph.facebook.com/#{friend[:id]}/picture" )
|
||||
%p
|
||||
- @fb_friends = MiniFB.get(@access_token, 'me', :type => "friends")
|
||||
- @fb_friends[:data].each do |friend|
|
||||
= image_tag( "http://graph.facebook.com/#{friend[:id]}/picture" )
|
||||
|
||||
= link_to "Disconnect from Facebook", services_destroy_path
|
||||
- else
|
||||
= link_to "Connect to Facebook (DO NOT USE WITH A REAL ACCOUNT)", @fb_access_url
|
||||
= link_to "Disconnect from Facebook", services_destroy_path
|
||||
- else
|
||||
= link_to "Connect to Facebook (DO NOT USE WITH A REAL ACCOUNT)", @fb_access_url
|
||||
|
||||
#content_bottom
|
||||
.back
|
||||
|
|
|
|||
|
|
@ -56,6 +56,11 @@ namespace :deploy do
|
|||
run "ln -s -f #{shared_path}/app_config.yml #{current_path}/config/app_config.yml"
|
||||
end
|
||||
|
||||
task :symlink_fb_config do
|
||||
run "touch #{shared_path}/fb_config.yml"
|
||||
run "ln -s -f #{shared_path}/fb_config.yml #{current_path}/config/fb_config.yml"
|
||||
end
|
||||
|
||||
task :start do
|
||||
start_mongo
|
||||
start_thin
|
||||
|
|
@ -152,4 +157,4 @@ namespace :db do
|
|||
|
||||
end
|
||||
|
||||
after "deploy:symlink", "deploy:symlink_images", "deploy:symlink_bundle", 'deploy:symlink_config'
|
||||
after "deploy:symlink", "deploy:symlink_images", "deploy:symlink_bundle", 'deploy:symlink_config', 'deploy:symlink_fb_config'
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ cross_server:
|
|||
deploy_to: '/usr/local/app/diaspora'
|
||||
user: 'root'
|
||||
repo: 'git://github.com/diaspora/diaspora.git'
|
||||
branch: 'salmon_refactor'
|
||||
branch: 'master'
|
||||
default_env: 'development'
|
||||
servers:
|
||||
tom:
|
||||
|
|
|
|||
|
|
@ -7,13 +7,17 @@ require File.expand_path('../application', __FILE__)
|
|||
Haml::Template.options[:format] = :html5
|
||||
Haml::Template.options[:escape_html] = true
|
||||
|
||||
# Load facebook connection application credentials
|
||||
fb_config = YAML::load(File.open(File.expand_path("./config/fb_config.yml")))
|
||||
FB_API_KEY = fb_config['fb_api_key']
|
||||
FB_SECRET = fb_config['fb_secret']
|
||||
FB_APP_ID = fb_config['fb_app_id']
|
||||
HOST = fb_config['host']
|
||||
|
||||
if File.exists?(File.expand_path("./config/fb_config.yml"))
|
||||
# Load facebook connection application credentials
|
||||
fb_config = YAML::load(File.open(File.expand_path("./config/fb_config.yml")))
|
||||
FB_API_KEY = fb_config['fb_api_key']
|
||||
FB_SECRET = fb_config['fb_secret']
|
||||
FB_APP_ID = fb_config['fb_app_id']
|
||||
HOST = fb_config['host']
|
||||
FACEBOOK = true
|
||||
else
|
||||
FACEBOOK = false
|
||||
end
|
||||
# Initialize the rails application
|
||||
Diaspora::Application.initialize!
|
||||
|
||||
|
|
|
|||
4
config/fb_config.yml.example
Normal file
4
config/fb_config.yml.example
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
fb_api_key: {key}
|
||||
fb_secret: {secret}
|
||||
fb_app_id: {app_id}
|
||||
host: http://localhost:3000/
|
||||
|
|
@ -18,7 +18,7 @@ he:
|
|||
invalid: "הססמה או הדוא״ל שגויים."
|
||||
invalid_token: "אסימון האימות שגוי."
|
||||
timeout: "ההפעלה שלך פגה, נא להיכנס שוב כדי להמשיך."
|
||||
inactive: "חשבונך לא הופעל עדין."
|
||||
inactive: "חשבונך לא הופעל עדיין."
|
||||
sessions:
|
||||
signed_in: "נכנסת בהצלחה."
|
||||
signed_out: "יצאת בהצלחה."
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ en:
|
|||
albums: "Albums"
|
||||
you_dont_have_any_photos: "You don't have any photos! Go to the"
|
||||
page_to_upload_some: "page to upload some."
|
||||
or: "or"
|
||||
comments:
|
||||
comment:
|
||||
ago: "ago"
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ he:
|
|||
add_a_new_aspect: "הוספת היבט חדש"
|
||||
create: "יציאה"
|
||||
create:
|
||||
success: "יש ללחוץ על סמל הפלוס שמימין כדי לומר לדיאספורה מי יעול לצפות בהיבט החדש שלך."
|
||||
success: "יש ללחוץ על סמל הפלוס שמימין כדי לומר לדיאספורה מי יכול לצפות בהיבט החדש שלך."
|
||||
destroy:
|
||||
success: "%{name} הוסר בהצלחה."
|
||||
update:
|
||||
|
|
@ -99,7 +99,7 @@ he:
|
|||
success: "כעת יופיע בפני החברים שלך היבט אחר שלך."
|
||||
helper:
|
||||
remove: "הסרה"
|
||||
aspect_not_empty: "ההיסט אינו ריק"
|
||||
aspect_not_empty: "ההיבט אינו ריק"
|
||||
users:
|
||||
edit:
|
||||
editing_profile: "עריכת הפרופיל"
|
||||
|
|
@ -134,13 +134,13 @@ he:
|
|||
delete_photo: "מחיקת תמונה"
|
||||
photo:
|
||||
show_comments: "הצגת הערות"
|
||||
posted_a_new_photo_to: "פורסמה תמונה חדשה אל"
|
||||
posted_a_new_photo_to: "פורסמה תמונה חדשה באלבום"
|
||||
new:
|
||||
new_photo: "תמונה חדשה"
|
||||
back_to_list: "חזרה לרשימה"
|
||||
post_it: "פרסום!"
|
||||
create:
|
||||
runtime_error: "העלאת התמונה נכשלה. האם החגורה שלך מהודקת?"
|
||||
runtime_error: "העלאת התמונה נכשלה. הידקת את החגורה?"
|
||||
integrity_error: "העלאת התמונה נכשלה. האם זו באמת הייתה תמונה?"
|
||||
type_error: "העלאת התמונה נכשלה. האם באמת נוספה תמונה?"
|
||||
update:
|
||||
|
|
@ -155,7 +155,7 @@ he:
|
|||
success: "הצטרפת לדיאספורה!"
|
||||
status_messages:
|
||||
new_status_message:
|
||||
tell_me_something_good: "בא לי לשמוע סיפור טוב"
|
||||
tell_me_something_good: "בא לי לשמוע סיפור נחמד"
|
||||
oh_yeah: "אחלה!"
|
||||
status_message:
|
||||
show_comments: "הצגת הערות"
|
||||
|
|
@ -165,7 +165,7 @@ he:
|
|||
status_message: "הודעת מצב"
|
||||
comments: "הערות"
|
||||
are_you_sure: "בבטחה?"
|
||||
destroy: "הריבה"
|
||||
destroy: "הריסה"
|
||||
view_all: "צפייה בכול"
|
||||
message: "הודעה"
|
||||
owner: "בעלים"
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ it:
|
|||
create: "Crea"
|
||||
create:
|
||||
success: "Clicca sul segno più nella parte sinistra per dire a Diaspora chi può vedere il tuo nuovo aspetto."
|
||||
failure: "Creazione dell'aspetto fallita."
|
||||
destroy:
|
||||
success: "%{name} è stato rimosso con successo."
|
||||
update:
|
||||
|
|
|
|||
|
|
@ -66,7 +66,10 @@ ru:
|
|||
add_a_new_aspect: "Добавить аспект"
|
||||
create: "Создать"
|
||||
create:
|
||||
success:"Нажмите на плюс слева, для того, что-бы указать Diaspora тех, кто может видеть ваш новый аспект."
|
||||
success:"Нажмите на плюс слева, для того, что-бы указать Diaspora тех, кто может видеть ваш новый аспект
|
||||
helper:
|
||||
remove: "Удалить"
|
||||
aspect_not_empty: "Аспект не пуст"
|
||||
users:
|
||||
edit:
|
||||
editing_profile: "Редактирование профиля"
|
||||
|
|
@ -79,8 +82,9 @@ ru:
|
|||
picture: "Аватар"
|
||||
editing_profile: "Редактирование профиля"
|
||||
albums: "Альбомы"
|
||||
you_dont_have_any_photos: "У вас нет ни одной фотографии! Перейдите на "
|
||||
page_to_upload_some: "страницу для загрузки."
|
||||
you_dont_have_any_photos: "У вас нет ни одной фотографии! Перейдите в"
|
||||
page_to_upload_some: "для загрузки."
|
||||
or: "или"
|
||||
comments:
|
||||
comment:
|
||||
ago: "ранее"
|
||||
|
|
@ -142,3 +146,18 @@ ru:
|
|||
save: "сохранить"
|
||||
are_you_sure: "Вы уверены?"
|
||||
remove_friend: "удалить друга"
|
||||
requests:
|
||||
new_request:
|
||||
add_a_new_friend_to: "добавить нового друга к"
|
||||
enter_a_diaspora_username: "Введите имя пользователя Diaspora:"
|
||||
your_diaspora_username_is: "Ваше имя пользователя Diaspora: %{diaspora_handle}"
|
||||
friends_username: "Имя пользователя друга"
|
||||
destroy:
|
||||
success: "Теперь вы друзья."
|
||||
error: "Выберите аспект!"
|
||||
ignore: "Игнорированные запросы дружбы."
|
||||
create:
|
||||
error: "Для этого адреса не найдено семя Diaspora!"
|
||||
already_friends: "Вы уже друзья с %{destination_url}!"
|
||||
success: "Запрос на дружбу выслан к %{destination_url}."
|
||||
horribly_wrong: "Что-то пошло совсем не так."
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@ Diaspora::Application.routes.draw do
|
|||
match 'webfinger', :to => 'publics#webfinger'
|
||||
match 'hcard/users/:id', :to => 'publics#hcard'
|
||||
|
||||
match 'hub', :to => 'publics#hub'
|
||||
|
||||
match '.well-known/host-meta',:to => 'publics#host_meta'
|
||||
match 'receive/users/:id', :to => 'publics#receive'
|
||||
match 'log', :to => "dev_utilities#log"
|
||||
|
|
|
|||
|
|
@ -24,40 +24,41 @@ module Diaspora
|
|||
end
|
||||
|
||||
def create_headers
|
||||
<<-XML.strip
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:statusnet="http://status.net/schema/api/1/">
|
||||
<generator uri="http://joindiaspora.com/">Diaspora</generator>
|
||||
<id>#{@user.username}/public</id>
|
||||
<title>Stream</title>
|
||||
<subtitle>its a stream</subtitle>
|
||||
<updated>#{Time.now.xmlschema}</updated>
|
||||
<author>
|
||||
<name>#{@user.real_name}</name>
|
||||
<uri>#{@user.public_url}</uri>
|
||||
</author>
|
||||
<<-XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:statusnet="http://status.net/schema/api/1/">
|
||||
<generator uri="http://joindiaspora.com/">Diaspora</generator>
|
||||
<id>#{@user.public_url}.atom</id>
|
||||
<title>#{@user.real_name}'s Public Feed</title>
|
||||
<subtitle>its a stream</subtitle>
|
||||
<updated>#{Time.now.xmlschema}</updated>
|
||||
<author>
|
||||
<name>#{@user.real_name}</name>
|
||||
<uri>#{@user.public_url}</uri>
|
||||
</author>
|
||||
XML
|
||||
end
|
||||
|
||||
def create_endpoints
|
||||
<<-XML
|
||||
<link href="#{APP_CONFIG[:pubsub_server]}" rel="hub"/>
|
||||
<link href="#{APP_CONFIG[:pubsub_server]}" rel="hub"/>
|
||||
<link href="#{@user.public_url}.atom" rel="self" type="application/atom+xml"/>
|
||||
XML
|
||||
end
|
||||
|
||||
def create_subject
|
||||
<<-XML
|
||||
<activity:subject>
|
||||
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
|
||||
<id>#{@user.public_url}</id>
|
||||
<title>#{@user.real_name}</title>
|
||||
<link rel="alternative" type="text/html" href="#{@user.public_url}"/>
|
||||
</activity:subject>
|
||||
<activity:subject>
|
||||
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
|
||||
<id>#{@user.public_url}</id>
|
||||
<title>#{@user.real_name}</title>
|
||||
<link rel="alternative" type="text/html" href="#{@user.public_url}"/>
|
||||
</activity:subject>
|
||||
XML
|
||||
end
|
||||
|
||||
def create_body
|
||||
@user.visible_posts(:public=>true).inject("") do |xml,curr|
|
||||
@user.visible_posts(:person_id => @user.person.id, :public=>true).inject("") do |xml,curr|
|
||||
if curr.respond_to?(:to_activity)
|
||||
unless xml
|
||||
curr.to_activity
|
||||
|
|
@ -70,7 +71,7 @@ module Diaspora
|
|||
|
||||
def create_footer
|
||||
<<-XML
|
||||
</feed>
|
||||
</feed>
|
||||
XML
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ module HCard
|
|||
doc = Nokogiri::HTML(Net::HTTP.get URI.parse(url))
|
||||
{:given_name => doc.css(".given_name").text,
|
||||
:family_name => doc.css(".family_name").text,
|
||||
:url => doc.css("#pod_location").text}
|
||||
:url => doc.css("#pod_location").text,
|
||||
:photo => doc.css(".photo")}
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -20,6 +20,10 @@ class MessageHandler
|
|||
[*destinations].each{|dest| @queue.push(Message.new(:post, dest, :body => b))}
|
||||
end
|
||||
|
||||
def add_hub_notification(hub_url, feed_url)
|
||||
@queue.push(Message.new(:hub_publish, hub_url, :body => feed_url))
|
||||
end
|
||||
|
||||
def process
|
||||
@queue.pop{ |query|
|
||||
case query.type
|
||||
|
|
@ -29,6 +33,9 @@ class MessageHandler
|
|||
when :get
|
||||
http = EventMachine::HttpRequest.new(query.destination).get :timeout => TIMEOUT
|
||||
http.callback {process}
|
||||
when :hub_publish
|
||||
http = EventMachine::PubSubHubbub.new(query.destination).publish :timeout => TIMEOUT
|
||||
http.callback {process; Rails.logger.debug(http.response)}
|
||||
else
|
||||
raise "message is not a type I know!"
|
||||
end
|
||||
|
|
|
|||
0
public/javascripts/fancybox/jquery.easing-1.3.pack.js
Executable file → Normal file
0
public/javascripts/fancybox/jquery.easing-1.3.pack.js
Executable file → Normal file
0
public/javascripts/fancybox/jquery.fancybox-1.3.1.css
Executable file → Normal file
0
public/javascripts/fancybox/jquery.fancybox-1.3.1.css
Executable file → Normal file
0
public/javascripts/fancybox/jquery.fancybox-1.3.1.js
Executable file → Normal file
0
public/javascripts/fancybox/jquery.fancybox-1.3.1.js
Executable file → Normal file
0
public/javascripts/fancybox/jquery.fancybox-1.3.1.pack.js
Executable file → Normal file
0
public/javascripts/fancybox/jquery.fancybox-1.3.1.pack.js
Executable file → Normal file
0
public/javascripts/fancybox/jquery.mousewheel-3.0.2.pack.js
Executable file → Normal file
0
public/javascripts/fancybox/jquery.mousewheel-3.0.2.pack.js
Executable file → Normal file
0
public/javascripts/fileuploader.js
Executable file → Normal file
0
public/javascripts/fileuploader.js
Executable file → Normal file
0
public/javascripts/jquery.cycle/jquery.cycle.lite.min.js
vendored
Executable file → Normal file
0
public/javascripts/jquery.cycle/jquery.cycle.lite.min.js
vendored
Executable file → Normal file
0
public/javascripts/jquery.infieldlabel.js
Executable file → Normal file
0
public/javascripts/jquery.infieldlabel.js
Executable file → Normal file
0
public/javascripts/web_socket.js
Executable file → Normal file
0
public/javascripts/web_socket.js
Executable file → Normal file
0
public/stylesheets/blueprint/src/grid.css
Executable file → Normal file
0
public/stylesheets/blueprint/src/grid.css
Executable file → Normal file
0
public/stylesheets/blueprint/src/print.css
Executable file → Normal file
0
public/stylesheets/blueprint/src/print.css
Executable file → Normal file
0
public/stylesheets/blueprint/src/reset.css
Executable file → Normal file
0
public/stylesheets/blueprint/src/reset.css
Executable file → Normal file
0
public/stylesheets/brandongrotesque_light/Brandon_light-webfont.svg
Executable file → Normal file
0
public/stylesheets/brandongrotesque_light/Brandon_light-webfont.svg
Executable file → Normal file
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
0
public/stylesheets/brandongrotesque_light/demo.html
Executable file → Normal file
0
public/stylesheets/brandongrotesque_light/demo.html
Executable file → Normal file
0
public/stylesheets/brandongrotesque_light/stylesheet.css
Executable file → Normal file
0
public/stylesheets/brandongrotesque_light/stylesheet.css
Executable file → Normal file
0
public/stylesheets/fileuploader.css
Executable file → Normal file
0
public/stylesheets/fileuploader.css
Executable file → Normal file
|
|
@ -7,9 +7,13 @@ then
|
|||
echo "Mongod not started"
|
||||
else
|
||||
mkdir -p -v log/thin/
|
||||
#force AGPL
|
||||
tar cf ../_source.tar -X .gitignore *
|
||||
mv ../_source.tar public/source.tar
|
||||
#force AGPL
|
||||
test -w public -a ! -e public/source.tar &&
|
||||
tar cf public/source.tar --exclude='source.tar' -X .gitignore *
|
||||
test -e public/source.tar || {
|
||||
echo "Can't find, or even create, public/source.tar. Giving up"
|
||||
exit 2
|
||||
}
|
||||
bundle exec ruby ./script/websocket_server.rb&
|
||||
bundle exec thin start $@
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -94,6 +94,26 @@ describe MessageHandler do
|
|||
end
|
||||
end
|
||||
|
||||
describe "Hub publish" do
|
||||
it 'should correctly queue up a pubsubhubbub publish request' do
|
||||
destination = "http://identi.ca/hub/"
|
||||
feed_location = "http://google.com/"
|
||||
|
||||
EventMachine.run {
|
||||
@handler.add_hub_notification(destination, feed_location)
|
||||
q = @handler.instance_variable_get(:@queue)
|
||||
|
||||
message = ""
|
||||
q.pop{|m| message = m}
|
||||
|
||||
message.destination.should == destination
|
||||
message.body.should == feed_location
|
||||
|
||||
EventMachine.stop
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
describe "Mixed Queries" do
|
||||
|
||||
it 'should process both POST and GET requests in the same queue' do
|
||||
|
|
|
|||
|
|
@ -12,12 +12,16 @@ describe User do
|
|||
user = Factory.build(:user, :username => "ALLUPPERCASE")
|
||||
user.valid?
|
||||
user.username.should == "alluppercase"
|
||||
|
||||
user = Factory.build(:user, :username => "someUPPERCASE")
|
||||
user.valid?
|
||||
user.username.should == "someuppercase"
|
||||
end
|
||||
end
|
||||
|
||||
describe '#diaspora_handle' do
|
||||
it 'uses the pod config url to set the diaspora_handle' do
|
||||
user.diaspora_handle.should == user.username + "@example.org"
|
||||
user.diaspora_handle.should == user.username + "@" + APP_CONFIG[:terse_pod_url]
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue