Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
3a6796d
Adds test file for create messages
dancernerd32 Jan 19, 2015
034e12f
Merge pull request #13 from dancernerd32/tighten_code
dancernerd32 Jan 19, 2015
b466441
Adds constraint that user only sees posts from friends & self
dancernerd32 Jan 19, 2015
dc09cbd
Points root to posts, adds link for posts
dancernerd32 Jan 19, 2015
dda1465
First attempt to fix hound's howls
dancernerd32 Jan 19, 2015
4ddf932
Merge pull request #14 from dancernerd32/posts
dancernerd32 Jan 19, 2015
e6b05a4
Adds method to assign secret key
dancernerd32 Jan 21, 2015
6a0e4e9
Moves date formatter to helpers folder
dancernerd32 Jan 21, 2015
1266c4f
Removes extra line to please the hound
dancernerd32 Jan 21, 2015
f81b718
Takes out require statement for recently removed file
dancernerd32 Jan 21, 2015
0bfc661
Merge pull request #15 from dancernerd32/organization
dancernerd32 Jan 21, 2015
ac5baf5
Merge master into add_secret_key branch
dancernerd32 Jan 21, 2015
3abe3eb
Assigns secret key to user
dancernerd32 Jan 21, 2015
c38fe6f
Adds public and private keys to user
dancernerd32 Jan 21, 2015
0997ad3
First attempt to fix hound's howls
dancernerd32 Jan 21, 2015
5397f2e
Second attempt to fix hound's howls
dancernerd32 Jan 21, 2015
37b510f
Third attempt to fix hound's howls
dancernerd32 Jan 21, 2015
765a93d
Adds primes_test file
dancernerd32 Jan 22, 2015
de23fff
Merge pull request #16 from dancernerd32/add_user_keys
dancernerd32 Jan 22, 2015
595bb9f
Merge master into create_messages
dancernerd32 Jan 22, 2015
9c77af7
Happy path for create messages passes
dancernerd32 Jan 23, 2015
04d3d95
User cannot send a message to a non-friend
dancernerd32 Jan 23, 2015
1e815df
Passes creates new messages tests for authenticated user
dancernerd32 Jan 23, 2015
6cf130a
Adds user authentication for create message
dancernerd32 Jan 23, 2015
57b1059
First attempt to fix hound's howls
dancernerd32 Jan 23, 2015
748b51f
Second attempt to fix hound's howls
dancernerd32 Jan 23, 2015
79e6bb3
Merge pull request #17 from dancernerd32/create_messages
dancernerd32 Jan 23, 2015
a730c30
Tests user views a friend's message on feed
dancernerd32 Jan 23, 2015
c43f6e8
Passes all tests for user views encrypted messages
dancernerd32 Jan 23, 2015
f25aabe
Attempt to fix hound's howls
dancernerd32 Jan 23, 2015
5efca62
Attempt to fix hound's howls
dancernerd32 Jan 23, 2015
9f06ff0
Attempt to fix hound's howls
dancernerd32 Jan 23, 2015
09b90c4
Attempt to fix hound's howls
dancernerd32 Jan 23, 2015
d5cf2bf
Attempt to fix hound's howls
dancernerd32 Jan 23, 2015
4c2b978
Merge pull request #18 from dancernerd32/view_encrypted_messages
dancernerd32 Jan 23, 2015
7d251b8
Adds decryption
dancernerd32 Jan 23, 2015
2d83b37
Merge pull request #20 from dancernerd32/decrypt_messages
dancernerd32 Jan 23, 2015
dbd9766
Wraps message text
dancernerd32 Jan 23, 2015
7e3f762
Merge pull request #21 from dancernerd32/css
dancernerd32 Jan 23, 2015
4009be8
Adds links to users
dancernerd32 Jan 23, 2015
f9bbce9
Changes confirmation message for friends
dancernerd32 Jan 23, 2015
0c89714
Merge pull request #22 from dancernerd32/add_links_to_users
dancernerd32 Jan 23, 2015
d4f5754
add .env to .gitignore
dancernerd32 Jan 23, 2015
29e5a68
use unicorn via procfile
dancernerd32 Jan 23, 2015
4265b6b
Merge pull request #23 from dancernerd32/add_gems
dancernerd32 Jan 23, 2015
184b704
Add placeholder text to forms
dancernerd32 Jan 23, 2015
02abb9f
Merge pull request #24 from dancernerd32/css
dancernerd32 Jan 23, 2015
e377f07
Adds form for entering secret key prior to decryption. Need to add a…
dancernerd32 Jan 24, 2015
92aa414
Fixes require_secret_keys method
dancernerd32 Jan 25, 2015
8b5d732
Adds variables to require_secret_keys method for render index
dancernerd32 Jan 25, 2015
d573c20
Attempt to fix hound's howls
dancernerd32 Jan 26, 2015
72015ed
Merge pull request #25 from dancernerd32/add_secret_key_form
dancernerd32 Jan 26, 2015
dba2821
Adds a little bit of styling
dancernerd32 Jan 26, 2015
9b005a7
Merge pull request #26 from dancernerd32/small_tweaks
dancernerd32 Jan 26, 2015
3abe37c
Updates readme
dancernerd32 Jan 31, 2015
988a8cc
Fixes message form when public keys are not entered
dancernerd32 Feb 2, 2015
f17283b
Merge pull request #27 from dancernerd32/fix_message_form
dancernerd32 Feb 2, 2015
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@
!/log/.keep
/tmp
/coverage
/primes.csv*
.env
3 changes: 2 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ gem 'sdoc', '~> 0.4.0', group: :doc
# gem 'bcrypt', '~> 3.1.7'

# Use Unicorn as the app server
# gem 'unicorn'
gem 'unicorn'
gem 'rails_12factor', group: :production

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
Expand Down
13 changes: 13 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ GEM
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
json (1.8.2)
kgio (2.9.3)
launchy (2.4.3)
addressable (~> 2.3)
loofah (2.0.1)
Expand Down Expand Up @@ -140,11 +141,17 @@ GEM
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.1)
loofah (~> 2.0)
rails_12factor (0.0.3)
rails_serve_static_assets
rails_stdout_logging
rails_serve_static_assets (0.0.3)
rails_stdout_logging (0.0.3)
railties (4.2.0)
actionpack (= 4.2.0)
activesupport (= 4.2.0)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
raindrops (0.13.0)
rake (10.4.2)
rdoc (4.2.0)
json (~> 1.4)
Expand Down Expand Up @@ -208,6 +215,10 @@ GEM
uglifier (2.7.0)
execjs (>= 0.3.0)
json (>= 1.8.0)
unicorn (4.8.3)
kgio (~> 2.6)
rack
raindrops (~> 0.7)
valid_attribute (2.0.0)
warden (1.2.3)
rack (>= 1.0)
Expand Down Expand Up @@ -237,11 +248,13 @@ DEPENDENCIES
pg
pry
rails (= 4.2.0)
rails_12factor
rspec-rails
sass-rails (~> 5.0)
sdoc (~> 0.4.0)
shoulda-matchers
spring
uglifier (>= 1.3.0)
unicorn
valid_attribute
web-console (~> 2.0)
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
34 changes: 9 additions & 25 deletions README.rdoc
Original file line number Diff line number Diff line change
@@ -1,28 +1,12 @@
== README
http://pssst-staging.herokuapp.com

This README would normally document whatever steps are necessary to get the
application up and running.
Psst! is a social networking site with a twist. Users can make friends and
create both public posts and secret messages. Secret messages are encrypted
posts, directed at a specific user. Anyone who can see your posts can see the
secret messages you send in their encrypted state, but only the intended viewer
can decrypt and read them. The site uses RSA public key encryption.

Things you may want to cover:

* Ruby version

* System dependencies

* Configuration

* Database creation

* Database initialization

* How to run the test suite

* Services (job queues, cache servers, search engines, etc.)

* Deployment instructions

* ...


Please feel free to use a different markup language if you do not plan to run
<tt>rake doc:app</tt>.
RSA encryption captured my interest when I learned about it in my number theory
class, and when thinking about things I wanted to program, it came to mind.
Coding the encryption and decryption algorithms was an exciting challenge.
22 changes: 19 additions & 3 deletions app/assets/stylesheets/application.css
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,23 @@
float: left;
}
.post_header{
color: red;
background-color: black;
border: 1px black solid;
color: white;
background-color: #393636;
padding: 10px 10px 2px 5px;
font-family: 'Playfair Display';
font-size: 14pt;
}
.post_header a{
color: white;
}
.post_header a:hover{
color: teal;
}
.text_body{
font-family: 'Roboto Condensed';
padding: 10px;

}
.panel{

}
6 changes: 5 additions & 1 deletion app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ def configure_permitted_parameters
:email,
:password,
:password_confirmation,
:remember_me
:remember_me,
:secret_key_p,
:secret_key_q,
:public_key_m,
:public_key_k
)
end

Expand Down
2 changes: 1 addition & 1 deletion app/controllers/friendships_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def create
@friendship = current_user.friendships.build(friend: @new_friend)
if @friendship.save
flash[:notice] = "You have successfully added #{@new_friend.username} as a
friend. We'll let you know when they confirm your friendship"
friend."

redirect_to root_path
end
Expand Down
110 changes: 110 additions & 0 deletions app/controllers/messages_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
def confirmed_friends(user)
confirmed_friends = []
user.friendships.each do |friendship|
if friendship.confirmed?
confirmed_friends << friendship.friend
end
end
user.inverse_friendships.each do |friendship|
if friendship.confirmed?
confirmed_friends << friendship.user
end
end
confirmed_friends
end

class MessagesController < ApplicationController
include EncryptionHelper

before_action :require_secret_keys, only: [:show]

def new
authenticate_user!
@user = current_user
@message = Message.new
@recipient_options = confirmed_friends(current_user)
end

def create
authenticate_user!
@recipient_options = confirmed_friends(current_user)
@message = Message.new(message_params)

if @message.valid? &&
@message.public_key_m == @message.recipient.public_key_m &&
@message.public_key_k == @message.recipient.public_key_k
@message.body = encrypt(@message.body,
@message.public_key_m,
@message.public_key_k)
end

@message.sender = current_user

if @message.public_key_m != @message.recipient.public_key_m ||
@message.public_key_k != @message.recipient.public_key_k
flash[:error] = "Public keys must match recipient's public keys"
render :new
elsif @message.save
flash[:notice] = "Your message has been sent."
redirect_to root_path
else
render :new
end
end

def index
authenticate_user!
@user = current_user
@secret_key_p = current_user.secret_key_p
@secret_key_q = current_user.secret_key_q
@messages = []
Message.all.order(:created_at).reverse_order.each do |message|
if message.recipient == current_user
@messages << message
end
end
end

def show
authenticate_user!
@message = Message.find(params[:id])
@message_body = @message.body
@p = @message.recipient.secret_key_p
@q = @message.recipient.secret_key_q
@m = @message.recipient.public_key_m
@k = @message.recipient.public_key_k
@user = current_user
@recipient = @message.recipient
end

private

def message_params
params.require(:message).permit(:body,
:recipient_id,
:public_key_m,
:public_key_k)
end

def require_secret_keys
if current_user
@user = current_user
@secret_key_p = current_user.secret_key_p
@secret_key_q = current_user.secret_key_q
@messages = []
Message.all.order(:created_at).reverse_order.each do |message|
if message.recipient == current_user
@messages << message
end
end
if !params[:secret_key_p] ||
!params[:secret_key_q] ||
params[:secret_key_p].to_i != @secret_key_p ||
params[:secret_key_q].to_i != @secret_key_q

flash[:error] = "Secret keys are required"
render :index
end
end
end
end
19 changes: 17 additions & 2 deletions app/controllers/posts_controller.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,26 @@
require "datetime"
class PostsController < ApplicationController
include PostHelper
def index
if !current_user
redirect_to new_user_session_path
else
@post = Post.new
@posts = Post.all.order(:created_at).reverse_order
@posts = []
@messages = []
Post.all.order(:created_at).reverse_order.each do |post|
if friends_post?(post)
@posts << post
elsif post.user == current_user
@posts << post
end
end
Message.all.order(:created_at).reverse_order.each do |message|
if friends_message?(message)
@messages << message
elsif message.sender == current_user
@messages << message
end
end
end
end

Expand Down
53 changes: 53 additions & 0 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
module ApplicationHelper
def split(datetime)
datetime.split("-")
end

def month(datetime)
months = {
"01" => "January",
"02" => "February",
"03" => "March",
"04" => "April",
"05" => "May",
"06" => "June",
"07" => "July",
"08" => "August",
"09" => "September",
"10" => "October",
"11" => "November",
"12" => "December",
}
months[split(datetime)[1]]
end

def day(datetime)
split(datetime)[2].split(" ")[0]
end

def year(datetime)
split(datetime)[0]
end

def time(datetime)
split_time = split(datetime)[2].split(" ")[1].split(":")
time = []
hour = split_time[0].to_i % 12
if hour == 0
hour = 12
end
time << hour
time << split_time[1]
if split_time[0].to_i < 12
time << "am"
else
time << "pm"
end
time
end

def format_date(datetime)
"#{month(datetime)} #{day(datetime)}, #{year(datetime)} at
#{time(datetime)[0]}:#{time(datetime)[1]}#{time(datetime)[2]}"
end
end
Loading