Eugen Rochko
27fc49d745
Add simple admin overview of PuSH subscriptions
2016-11-28 18:45:13 +01:00
Eugen Rochko
2d2c81765b
Adding embedded PuSH server
2016-11-28 13:36:47 +01:00
Eugen Rochko
4495baf451
X-RateLimit-Reset formatted with iso8601
2016-11-25 15:21:22 +01:00
Eugen Rochko
8a3745a4df
Remove stale entries from cache results
2016-11-25 13:25:40 +01:00
Eugen Rochko
71401659b8
Fix #65 - Options to block notifications from people you don't follow/who don't follow you
2016-11-25 13:13:16 +01:00
Eugen Rochko
8efa081f21
Remove Neo4J
2016-11-24 23:46:27 +01:00
Eugen Rochko
8e34bed7cc
Mini Profiler not working well, remove it
2016-11-24 19:59:11 +01:00
Alyssa Ross
cefef2c571
Extract filename obfuscation into module
2016-11-24 00:30:58 +00:00
Andrea Faulds
7161f91313
Rename media to avoid exposing filename ( fixes #207 )
2016-11-23 21:03:03 +00:00
Eugen Rochko
79a0135869
Cache accounts/:id/statuses and single statuses too
2016-11-23 19:00:43 +01:00
Eugen Rochko
0603971894
Adding sensitive marker to statuses in API
2016-11-23 10:46:48 +01:00
Eugen Rochko
4bdb6a0eaf
Rename "publish" to "toot" in english locale, fix lightbox showing old image
...
before loading new one, cache notifications API, fix missing follow button
on public profiles
2016-11-23 09:20:34 +01:00
Eugen Rochko
cf912e01fd
Implement includes caching for timelines APIs
2016-11-23 08:34:35 +01:00
Eugen Rochko
5c78547198
More query optimizations
2016-11-22 23:18:54 +01:00
Eugen Rochko
fc90d38893
Moving some counter queries out of subqueries in the API
2016-11-22 22:59:54 +01:00
Eugen Rochko
45c7ee39b3
Remove unneeded indices, improve error handling in background workers, don't needlessly reload reblogged status, send Devise e-mails asynchronously
2016-11-22 17:32:51 +01:00
Eugen Rochko
1788164352
Local accounts can control "silenced" attribute which removes them from public timeline
2016-11-21 23:06:41 +01:00
Eugen Rochko
627a85f4e4
Better error message in doorkeeper json response
2016-11-21 16:19:35 +01:00
Eugen Rochko
f88ca4a206
Performance improvement for notifications API
2016-11-21 16:10:42 +01:00
Eugen Rochko
52119104b9
Remove some n+1 queries from notifications API
2016-11-21 15:16:04 +01:00
Eugen Rochko
e8c27767aa
Remove orphaned notifications, add scopes param to app create API
2016-11-21 14:59:13 +01:00
Eugen Rochko
fb48cc3b74
Desktop notifications
2016-11-21 10:24:50 +01:00
Eugen Rochko
da2ef4d676
Adding unified streamable notifications
2016-11-20 19:39:58 +01:00
Eugen Rochko
7dea6a23f7
Move Salmon processing to background as well as PuSH
2016-11-18 23:24:57 +01:00
Eugen Rochko
2c766bd4b4
Add user locale setting
2016-11-16 17:56:31 +01:00
Eugen Rochko
3ce6ac0ce2
Adding some localizations
2016-11-15 23:02:57 +01:00
Eugen Rochko
4f07fb1f0a
Fix #144 - Filter statuses from blocked users out of ancestors/descendants results
2016-11-15 17:33:41 +01:00
Eugen Rochko
fdc17bea58
Fix rubocop issues, introduce usage of frozen literal to improve performance
2016-11-15 16:56:29 +01:00
Eugen Rochko
a91c3ef6ce
Delegate processing of incoming PuSH data to background workers
2016-11-15 15:43:33 +01:00
Eugen Rochko
cea28e0c1d
Fix wrong link header on followers API, wrong link in tabs component, order
...
account results
2016-11-14 01:19:25 +01:00
Eugen Rochko
afded319d2
Add limit to search results
2016-11-12 14:49:28 +01:00
Eugen Rochko
09218d4c01
Use full-text search for autosuggestions
2016-11-12 14:36:10 +01:00
Eugen Rochko
17903c6dae
Improve filtering of public/hashtag timelines, both in backlog and real-time
2016-11-10 00:03:33 +01:00
Eugen Rochko
448ab18a20
Replace setting custom CORS headers with rack-cors, set it on /oauth/token endpoint
2016-11-09 18:06:01 +01:00
Eugen Rochko
b13e7dda1f
API pagination for all collections using Link header
2016-11-09 17:48:44 +01:00
Eugen Rochko
9aecc0f48a
Move timelines API from statuses to its own controller, add a check for
...
resources that require a user context vs those that don't (such as public timeline)
/api/v1/statuses/public -> /api/v1/timelines/public
/api/v1/statuses/home -> /api/v1/timelines/home
/api/v1/statuses/mentions -> /api/v1/timelines/mentions
/api/v1/statuses/tag/:tag -> /api/v1/timelines/tag/:tag
2016-11-08 23:29:08 +01:00
Eugen Rochko
a698b767c1
Fix linking of remote hashtags in UI, add public view of hashtags
2016-11-05 17:44:14 +01:00
Eugen Rochko
48b9619439
Adding hashtags
2016-11-05 17:13:14 +01:00
Eugen Rochko
62292797ec
Adding hashtag model
2016-11-04 19:12:59 +01:00
Eugen Rochko
3731230c6d
Allow @username@domain/@username in follow form, prevent duplicate accounts
...
created via remote look-up when domains differ but point to the same resource
2016-11-03 16:57:44 +01:00
Eugen Rochko
e4671adc25
Fix reblogged/favourited caching; add API endpoints for who favd/reblogged status
2016-11-03 14:50:22 +01:00
Eugen Rochko
562044f36a
Need to disable caching again due to bug in Rabl
2016-11-03 13:59:31 +01:00
Eugen Rochko
9467b900a2
Make cookies https-only if LOCAL_HTTPS is true, set X-Frame-Options to DENY,
...
add permissive CORS to API controllers
2016-11-02 12:58:15 +01:00
Eugen Rochko
dd03118098
Fix follow icon changing plus to minus, add terms page stub
2016-11-01 18:05:55 +01:00
Eugen Rochko
fa1cc2d05a
Limit returned followees/followers by API to 40 for now
2016-10-30 15:14:07 +01:00
Eugen Rochko
e0a197650a
Adding common followers API, fixing fallback query again
2016-10-29 01:29:19 +02:00
Eugen Rochko
b746a931a5
Fix OAuth authorization redirect
2016-10-23 12:05:55 +02:00
Eugen Rochko
a9e40a3d80
Adding OAuth access scopes, fixing OAuth authorization UI, adding rate limiting
...
to the API
2016-10-22 19:39:44 +02:00
Eugen Rochko
04bbc57690
Fix #100 - Add "back" button to certain views
...
Also fix reloading of timelines after merge-type events
2016-10-19 18:20:19 +02:00
Eugen Rochko
43df35213e
Improving all forms
2016-10-18 16:37:15 +02:00
Eugen Rochko
2e0a38d07c
Added e-mail edit field to settings, proper format default for webfinger
2016-10-18 03:34:26 +02:00
Eugen Rochko
d5e086a47b
Adding application/jrd+json webfinger resource
2016-10-18 02:54:49 +02:00
Eugen Rochko
de1f3aab86
Fix #16 - Optimize n+1 queries when checking reblogged/favourited values for status lists in API
2016-10-16 19:10:16 +02:00
Eugen Rochko
e21a3fe0cd
Adding sync of follow relationships to Neo4J, accounts/suggestions API
2016-10-14 23:10:07 +02:00
Eugen Rochko
7a6d95f70c
E-mail preferences page
2016-10-14 02:28:49 +02:00
Eugen Rochko
33f7e1cf99
Shorten rendered links (strip protocol and www, truncate to 30 chars), redirect
...
to sign in page after sign up instead of root path which redirects to /about
2016-10-13 16:51:34 +02:00
Eugen Rochko
157f03f8bd
No-op for Salmons without body, fail fast if Webfinger does not contain
...
all required resource links (profile page, salmon, atom feed, magic key)
2016-10-13 13:41:06 +02:00
Eugen Rochko
68eed8c61f
Stop logging incoming Atom
2016-10-10 18:16:39 +02:00
Eugen Rochko
f49ed8c819
Log incoming Atom from PuSH
2016-10-10 17:40:28 +02:00
Eugen Rochko
427ba27641
Public timeline to exclude users you blocked
2016-10-09 15:15:21 +02:00
Eugen Rochko
22a8801dbc
Adding domain blocks
2016-10-09 14:48:59 +02:00
Eugen Rochko
1f650d327d
Adding public timeline
2016-10-07 16:00:11 +02:00
Eugen Rochko
943c69c65d
Fix #73 - Click on in-UI profile avatar/name to open public profile
2016-10-06 23:15:50 +02:00
Eugen Rochko
3554d638b3
Fix #72 - add follow/unfollow button to public profiles
2016-10-06 21:27:58 +02:00
Eugen Rochko
15d01a5e08
Better comparison of "local" domain
2016-10-06 16:36:16 +02:00
Eugen Rochko
b60430fe8f
Fix sign-in redirecting "back" to a missing image because missing static files hit the raise_not_found method
2016-10-06 15:42:00 +02:00
Eugen Rochko
2f5b205916
Catch Paperclip errors on /api/v1/media, return early from update profile service if XML given is nil
2016-10-06 14:40:15 +02:00
Eugen Rochko
fe77921e47
Catching more exceptions that slipped through, removing AR logging from
...
production as it's very verbose and not very useful
2016-10-05 13:26:44 +02:00
Eugen Rochko
7b9a4af311
API for blocking and unblocking
2016-10-03 18:17:06 +02:00
Eugen Rochko
2c9e672ee2
Integrating block relationships into the API (read-only for now)
2016-10-03 17:16:58 +02:00
Eugen Rochko
9d59d7b463
Adding a block model and filter mentions from blocked users ( fix #60 )
2016-10-03 17:12:13 +02:00
Eugen Rochko
fc198a8b4c
Adding e-mail confirmations
2016-10-03 16:51:00 +02:00
Eugen Rochko
188c6f326b
Making public pages responsive, removing reblogs/favs counts from them
2016-10-03 00:26:00 +02:00
Eugen Rochko
9fd3d7b6cd
Add since_id param to feeds
2016-10-02 22:35:27 +02:00
Eugen Rochko
a0f85774c4
Redirect after sign in to previous page (unless it's a sign in/up/etc page)
2016-10-02 17:11:08 +02:00
Eugen Rochko
6d7290f47c
Add API for getting info about authenticated user: /api/v1/accounts/verify_credentials
2016-10-02 16:14:21 +02:00
Eugen Rochko
96ad9b0db1
Meaningful validation errors in API response
2016-09-30 22:31:16 +02:00
Eugen Rochko
62b057b085
Adjust client registration API
2016-09-30 00:03:08 +02:00
Eugen Rochko
ef2b50c9ac
Deleting statuses from UI
2016-09-30 00:00:45 +02:00
Eugen Rochko
927333f4f8
Improve code style
2016-09-29 21:28:21 +02:00
Eugen Rochko
e63aebff7a
Adding landing page
2016-09-27 23:12:33 +02:00
Eugen Rochko
4f9b7432dd
Fix #52 - Add API versioning (v1)
2016-09-27 16:59:08 +02:00
Eugen Rochko
7e14eefc81
Replace logo, fix #57 - delete/unreblog/unfavourite API, fix #45 - app
...
registration API
2016-09-26 23:56:53 +02:00
Eugen Rochko
693383234c
Improved style of settings page
2016-09-25 15:48:20 +02:00
Eugen Rochko
3f9708edc4
Change output of api/accounts/:id/follow and unfollow to return relationship
...
Track relationship in redux state. Display follow/unfollow and following-back
information on account view (unstyled)
2016-09-23 20:23:26 +02:00
Eugen Rochko
c6d893a71d
Uploading/undoing media modifies status text. Also: status text trimmed before validation
2016-09-22 21:39:53 +02:00
Eugen Rochko
c0e9603c92
Fix #50 - Order ancestors/descendants by tree path
2016-09-21 23:18:28 +02:00
Eugen Rochko
e46abc71ca
Fix notifications in UI, added new API for fetching account relationships
2016-09-21 22:07:18 +02:00
Eugen Rochko
4bec613897
Fix #24 - Thread resolving for remote statuses
...
This is a big one, so let me enumerate:
Accounts as well as stream entry pages now contain Link headers that
reference the Atom feed and Webfinger URL for the former and Atom entry
for the latter. So you only need to HEAD those resources to get that
information, no need to download and parse HTML <link>s.
ProcessFeedService will now queue ThreadResolveWorker for each remote
status that it cannot find otherwise. Furthermore, entries are now
processed in reverse order (from bottom to top) in case a newer entry
references a chronologically previous one.
ThreadResolveWorker uses FetchRemoteStatusService to obtain a status
and attach the child status it was queued for to it.
FetchRemoteStatusService looks up the URL, first with a HEAD, tests
if it's an Atom feed, in which case it processes it directly. Next
for Link headers to the Atom feed, in which case that is fetched
and processed. Lastly if it's HTML, it is checked for <link>s to the Atom
feed, and if such is found, that is fetched and processed. The account for
the status is derived from author/name attribute in the XML and the hostname
in the URL (domain). FollowRemoteAccountService and ProcessFeedService
are used.
This means that potentially threads are resolved recursively until a dead-end
is encountered, however it is performed asynchronously over background jobs,
so it should be ok.
2016-09-21 01:50:31 +02:00
Eugen Rochko
1d2856c2af
Since GNU Social hubs don't seem to return a hub.lease_seconds param in the subscription confirmation request,
...
we'll have to default that value to the GS "minimum" (from their code) which is 24 hours.
2016-09-20 03:24:04 +02:00
Eugen Rochko
246330493b
More debugging for PuSH confirmations
2016-09-20 03:18:55 +02:00
Eugen Rochko
a66d34878c
Add more logging to PuSH callback
2016-09-20 03:12:23 +02:00
Eugen Rochko
608a2bfffc
Upgrade to PubSubHubbub 0.4 (removing verify_token)
2016-09-20 02:43:20 +02:00
Eugen Rochko
059ebbf48d
Separate PuSH subscriptions from following, add mastodon:push:refresh task,
...
respect hub.lease_seconds (fix #46 )
2016-09-20 00:43:36 +02:00
Eugen Rochko
adffc7a495
Fix #43
2016-09-18 12:28:49 +02:00
Eugen Rochko
bd5ad304ba
Adding media controller, 1 webm/compose form allowed, previews generated
2016-09-17 17:47:26 +02:00
Eugen Rochko
0e9c1a297a
Improved error handling for FollowRemoteService
2016-09-17 17:03:36 +02:00
Eugen Rochko
8c0b19012b
Fix #41 , debug #42
2016-09-17 16:36:10 +02:00
Eugen Rochko
5b0cef9781
Setting up preliminary "detailed" routes in the UI, new API end-point for fetching status context
2016-09-16 00:21:51 +02:00
Eugen Rochko
d6a64f45fd
Adding a notification stack for error messages
2016-09-12 19:20:55 +02:00
Eugen Rochko
762157ee4e
Fix for single status pages
2016-09-08 21:23:29 +02:00
Eugen Rochko
85d89b472d
Optimized n+1 queries in accounts Atom and HTML views
...
Added stack trace for SQL queries in development
Removed badly thought out accounts/lookup API
2016-09-08 20:36:01 +02:00
Eugen Rochko
509c18eb13
Fix local follows, 404 in logs
2016-09-08 02:40:51 +02:00
Eugen Rochko
0f4bc56719
Improving production logs, removing n+1 on media attachments in atom,
...
adding attachments display to static views
2016-09-08 01:24:26 +02:00
Eugen Rochko
eec0dc46a6
PostStatusService can attach media to status, ProcessFeedService likewise
2016-09-05 18:39:53 +02:00
Eugen Rochko
ae1fac0062
Add API to upload media attachments
2016-09-05 17:46:36 +02:00
Eugen Rochko
b5ebf99439
Possibly fix issue with stale favourite/reblog information after API call
2016-09-04 21:28:48 +02:00
Eugen Rochko
54ea7f5dfe
Case-insensitive search by usernames
2016-09-04 21:06:04 +02:00
Eugen Rochko
92afd29650
The frontend will now be an OAuth app, auto-authorized. The frontend will use an access token for API requests
...
Adding better errors for the API controllers, posting a simple status works from the frontend now
2016-08-26 19:12:19 +02:00
Eugen Rochko
bc0692d75b
Removing mini-profiler that doesn't work, formatting timelines a bit better
2016-08-24 19:23:37 +02:00
Eugen Rochko
49520d6e62
Adding React.js, Redux, revamping dashboard
2016-08-24 17:56:44 +02:00
Eugen Rochko
8985f8e66c
Fixing more configuration issues with ActionCable
2016-08-18 18:39:35 +02:00
Eugen Rochko
8459acd123
Fix for force SSL issue with websockets
2016-08-18 17:48:57 +02:00
Eugen Rochko
6426819b6f
Fix tests
2016-08-18 17:22:44 +02:00
Eugen Rochko
6deb9f966e
Live timelines using ActionCable
2016-08-18 15:49:51 +02:00
Eugen Rochko
10ba09f546
Upgrade to Rails 5.0.0.1
2016-08-17 17:58:00 +02:00
Eugen Rochko
ff2cbc0753
Remember me enabled by default
2016-03-28 00:06:52 +02:00
Eugen Rochko
85b00d19b8
Moving Salmon notifications to background processing, fixing mini-profiler
...
behaviour with Turbolinks enabled, optimizing Rabl for production
2016-03-26 13:42:10 +01:00
Eugen Rochko
da4b675aca
Fix favourite handling in ProcessInteractionService
2016-03-26 01:34:12 +01:00
Eugen Rochko
43bb8a25e7
Remember user logins by default
2016-03-26 01:14:37 +01:00
Eugen Rochko
5764d52b04
Fix Sidekiq pooling issues. Remove API docs from homepage, replace with
...
a basic home timeline
2016-03-25 16:10:14 +01:00
Eugen Rochko
e24bfbde1a
Fixing FanOutOnWriteService, fixing Sidekiq not having enough DB connections
...
in the pool, adding a throttle of 60rpm per IP, adding mini profiler, adding
admin status to users
2016-03-25 14:12:24 +01:00
Eugen Rochko
a08e724476
Fix subscriptions:clear task, refactor feeds, refactor streamable activites
...
and atom feed generation to some extent, as well as the way mentions are
stored
2016-03-25 02:13:30 +01:00
Eugen Rochko
9594f0e858
Fix preloading
2016-03-24 13:28:11 +01:00
Eugen Rochko
0f5bbb999c
Pre-loading polymorphic associations for Atom feeds
2016-03-24 13:21:53 +01:00
Eugen Rochko
7e58303a8d
Limit Atom feeds to 20 items by default, add pagination by max_id
...
(But there are no Atom feed pagination elements yet)
2016-03-24 12:49:34 +01:00
Eugen Rochko
082e1cbe5a
Fix default max_id query in paginate_by_max_id
2016-03-22 21:53:33 +01:00
Eugen Rochko
12559b01ea
Add pagination by max_id instead of offset/limit
2016-03-22 21:38:47 +01:00
Eugen Rochko
f14f462eaf
Adding Turbolinks, adding status posting form on homepage
2016-03-21 18:26:47 +01:00
Eugen Rochko
c28971c70c
Fixed the lookup API method
2016-03-21 17:33:04 +01:00
Eugen Rochko
02696a063e
Change default avatar, redirect to home after sign up
2016-03-21 17:18:30 +01:00
Eugen Rochko
9d55529318
Fix text color in dashboard inputs, sanitize remote status content in UI,
...
simplify FanOutOnWriteService, add /api/accounts/lookup method
2016-03-21 17:02:16 +01:00
Eugen Rochko
7e00a21ea6
Small optimizations in Atom feeds
2016-03-21 10:31:20 +01:00
Eugen Rochko
19a259915e
Security update
2016-03-21 10:08:19 +01:00
Eugen Rochko
2ba6537f52
Escape PuSH challenge and change subscriptions and salmon APIs to text/plain
2016-03-21 09:24:29 +01:00
Eugen Rochko
b640f35621
Writing out more tests, fixed some bugs
2016-03-20 13:03:06 +01:00
Eugen Rochko
e14b76c7cb
On following/followers pages, show most recent first
2016-03-19 22:54:40 +01:00
Eugen Rochko
71ae4dd3d2
Adding public following and followers pages, fix #3
2016-03-19 14:02:30 +01:00
Eugen Rochko
c349200761
Removing some unused gems, adding pagination to profiles, fix #10
2016-03-19 12:49:34 +01:00
Eugen Rochko
9a7485d034
Fix typo on /api/accounts/:id/statuses, fix potential case-sensitivity issue
...
when registering incoming status mentions, add Travis CI file
2016-03-18 23:23:19 +01:00
Eugen Rochko
323474c97e
Fix #2 , add rake task for PuSH-unsubscribing from remote users who have no
...
local followers. Remote users' usernames SHOULD be case-sensitive
2016-03-17 12:02:45 +01:00
Eugen Rochko
9cb690c706
Access tokens no longer expire, case-insensitive local username validation, as well as case-insensitive Webfinger look-up
2016-03-16 18:29:52 +01:00
Eugen Rochko
6fec8afc3f
Bind oauth applications to users
2016-03-14 17:49:13 +01:00
Eugen Rochko
3441361568
Adding simple_form, adding profile settings, header image
2016-03-12 20:47:22 +01:00
Eugen Rochko
1aa477ac2f
Customized more doorkeeper views, only logged in users can create oauth apps
2016-03-12 19:46:06 +01:00
Eugen Rochko
aab9f57e36
Adding config for puma, dashboard layout, fixing some queries
2016-03-12 16:21:53 +01:00
Eugen Rochko
447cfef62d
Improving feed queries, switching API to doorkeeper authentication
2016-03-11 16:47:36 +01:00
Eugen Rochko
6c4c84b161
Distrubute statuses as a fan-out-on-write system, with optional precomputing
2016-03-08 20:20:45 +01:00
Eugen Rochko
fe57f6330f
API methods for retrieving home and mentions timelines
2016-03-07 13:25:26 +01:00
Eugen Rochko
f099bc6091
Adding API for favouriting a status
2016-03-07 12:58:42 +01:00
Eugen Rochko
ab6696e855
Adding doorkeeper, adding a REST API
...
POST /api/statuses Params: status (text contents), in_reply_to_id (optional)
GET /api/statuses/:id
POST /api/statuses/:id/reblog
GET /api/accounts/:id
GET /api/accounts/:id/following
GET /api/accounts/:id/followers
POST /api/accounts/:id/follow
POST /api/accounts/:id/unfollow
POST /api/follows Params: uri (e.g. user@domain)
OAuth authentication is currently disabled, but the API can be used with HTTP Auth.
2016-03-07 12:42:33 +01:00
Eugen Rochko
3824c58853
Adding GNU Public license, adding home timeline, reblog/favourite counters
2016-03-06 17:52:23 +01:00
Eugen Rochko
c605b828b5
Adding routes to follow, unfollow, favourite and reblog (locally known models)
2016-03-06 12:51:55 +01:00
Eugen Rochko
aab330eb2d
Adjusting design of public pages, optimizing account page queries
2016-03-06 12:34:39 +01:00
Eugen Rochko
ab80ebdeec
Adjusting design of profile and entry pages, linkify mentions in statuses
2016-03-05 23:42:40 +01:00
Eugen Rochko
6045b6cb18
Customizing devise views and controllers
2016-03-05 22:43:05 +01:00
Eugen Rochko
3b4e04dc32
Fixing some bugs, adding pending test examples
2016-03-05 12:50:59 +01:00
Eugen Rochko
23d08c6749
Changing the use of config constants to the Rails configuration object
2016-02-29 20:06:39 +01:00
Eugen Rochko
0e8f59c16f
Refactoring Grape API methods into normal controllers & other things
2016-02-29 19:42:08 +01:00
Eugen Rochko
47d50b0e39
A lot of fixes from a live test
2016-02-28 15:46:29 +01:00
Eugen Rochko
24646d5769
Adding views for the profile and entry pages
2016-02-26 20:48:20 +01:00
Eugen Rochko
fa33750105
Adding reblogs, favourites, improving atom generation
2016-02-23 19:17:37 +01:00
Eugen Rochko
2bc48e9064
Individual atom entries
2016-02-22 19:11:07 +01:00
Eugen Rochko
1dad72bf13
Fixes and general progress
2016-02-22 18:10:30 +01:00
Eugen Rochko
709c6685a9
Made some progress
2016-02-22 16:00:20 +01:00
Eugen Rochko
9c4856bdb1
Initial commit
2016-02-20 22:53:20 +01:00