Giter Club home page Giter Club logo

woodwind's Introduction

Woodwind

Requirements Status

A minimum viable stream-style feed reader.

Supports mf2 h-feed and xml feeds (thanks to Universal Feed Parser).

Installation

How to run your own instance of Woodwind. You'll first need to make sure you have Postgres and Redis installed and running.

git clone https://github.com/kylewm/woodwind.git
cd woodwind

Set up the virtualenv and install dependencies.

virtualenv --python=/usr/bin/python3 venv
source venv/bin/activate
pip install -r requirements.txt

Copy woodwind.cfg.template to woodwind.cfg and edit it to check the Postgres connection string.

Then create database tables and run Woodwind.

# create the postgres database
createdb woodwind
# copy and edit the configuration file
cp woodwind.cfg.template woodwind.cfg
nano woodwind.cfg
# create the database tables
python init_db.py
# finally run the application
uwsgi woodwind-dev.ini

Now visit localhost:3000, and you should see the login screen!

woodwind's People

Contributors

jeena avatar jonnybarnes avatar kevinmarks avatar kylewm avatar martymcguire avatar requires avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

woodwind's Issues

HTML escaping in syndicate-to

In the new Micropub syndication targets format, the uid field can be literally anything:

The uid property is opaque to the client, and is the value the client sends in the Micropub request to indicate the targets to syndicate to.

I use HTML (a Bridgy Publish link) as the uid… which breaks Woodwind:
screen_2016-05-06-01 51 30

This is vulnerable to XSS — although in this case a user can only attack their own browser, putting untrusted strings directly into HTML is not a good idea.

Woodwind should escape the uid in the template, and unescape when sending Micropub post requests.

Canonicalize URL variants

Right now subscribed to all three of https://ben.thatmustbe.me, http://ben.thatmustbe.me, http://ben.thatmustbe.me/

woodwind=# select * from feed where id=66 or id=75 or id=87;
 id |        name        |          origin           |           feed            | type |        last_updated        |        last_checked        | etag
----+--------------------+---------------------------+---------------------------+------+----------------------------+----------------------------+------
 66 | ben.thatmustbe.me  | https://ben.thatmustbe.me | https://ben.thatmustbe.me | html | 2015-02-19 17:18:28.419858 | 2015-02-19 18:20:27.844713 |
 75 | ben.thatmustbe.me  | http://ben.thatmustbe.me  | http://ben.thatmustbe.me  | html | 2015-02-19 13:45:00.287542 | 2015-02-19 16:59:55.130761 |
 87 | ben.thatmustbe.me/ | http://ben.thatmustbe.me/ | http://ben.thatmustbe.me/ | html | 2015-02-19 18:05:16.210167 | 2015-02-19 19:10:08.398211 |

HTML within <noscript> is shown

I added lazy loading to my h-feed of photos at https://jeena.net/photos and I added <noscript> for browsers which aren't able to deal with the javascript loading the images on demand by scrolling.

Sadly woodwind shows the html content of the <noscript>-tag instead which looks weird:

woodwind-bug

I'm not quite sure how to deal with things like this, it makes h-feed not as apealing for now. Perhaps the readers should get the full content from the permalink instead?

Relative URLs in authorization_endpoint aren't correctly resolved

On my site, 00dani.me, I've declared my authorisation endpoint like so:

<link rel="authorization_endpoint" href="/auth/indie" />

The correct behaviour when attempting to log in to Woodwind as 00dani.me would be, therefore, to redirect to https://00dani.me/auth/indie with appropriate parameters. Woodwind, however, incorrectly redirects to https://woodwind.xyz/auth/indie instead - presumably it just tries to redirect to /auth/indie, and defaults to the same domain.

Other IndieAuth clients, like https://indieauth.com and https://telegraph.p3k.io, correctly resolve my authorisation endpoint. Woodwind should do the same.

Replies count as 2 posts

When a reply is added to the stack of new posts not shown, it counts as 2 posts. So even if there's only one reply post waiting to be shown, the link will say "2 New Posts".

Request: tag sorting

Minor request: alphabetically sorting the tags at the top of the main page would be nice.

Known replies appear as ordinary notes

Reply posts in Known show up as if they were just ordinary notes in Woodwind (without an "In reply to..." link above them).

How replies from Known appear on Woodwind:
Known reply on Woodwind

How replies appear on Known:
Known reply

How replies from Redwind appear:
Redwind reply on Woodwind

Sorry if this is a problem with Known and not Woodwind, but the reply link is properly tagged as u-in-reply-to, so I figured it was a parsing issue.

Missing icons for syndicate-to

The buttons for syndication expect the names to be domain names, if they're not domain names then it looks quite odd:

woodwind-icons

Perhaps it would be good to at least have the name as an alt text so it would show up if the image can not be loaded.

clarify buttons' purposes on the Feeds page

replace Update with a refresh icon, and Unsubscribe with a red X (+ confirmation dialog).

separate Save so it's clear it applies to save changes to the feed (or just make the feeds immutable -- probably smarter -- see #17)

thanks @gRegorLove for the suggestions

violates FK constraints deleting posts with reply context

[2015-02-26 16:58:27,390: ERROR/MainProcess] Task woodwind.tasks.update_feed[3aa718d3-5bcd-4235-ba1f-5d1be4a438bd] raised unexpected: InvalidRequestError('This Session\'s transaction has been ro
lled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (IntegrityError) update or delete on tab
le "entry" violates foreign key constraint "entry_to_reply_context_context_id_fkey" on table "entry_to_reply_context"\nDETAIL:  Key (id)=(19311) is still referenced from table "entry_to_reply_co
ntext".\n \'DELETE FROM entry WHERE entry.id = %(id)s\' {\'id\': 19311}',)
Traceback (most recent call last):
  File "/srv/www/kylewm.com/woodwind/venv/lib/python3.4/site-packages/celery/app/trace.py", line 240, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/srv/www/kylewm.com/woodwind/venv/lib/python3.4/site-packages/celery/app/trace.py", line 438, in __protected_call__
    return self.run(*args, **kwargs)
  File "/srv/www/kylewm.com/woodwind/woodwind/tasks.py", line 67, in update_feed
    process_feed(session, feed)
  File "/srv/www/kylewm.com/woodwind/woodwind/tasks.py", line 117, in process_feed
    session.commit()
  File "/srv/www/kylewm.com/woodwind/venv/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 776, in commit
    self.transaction.commit()
  File "/srv/www/kylewm.com/woodwind/venv/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 375, in commit
    self._assert_active(prepared_ok=True)
  File "/srv/www/kylewm.com/woodwind/venv/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 214, in _assert_active
    % self._rollback_exception
sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.ro
llback(). Original exception was: (IntegrityError) update or delete on table "entry" violates foreign key constraint "entry_to_reply_context_context_id_fkey" on table "entry_to_reply_context"
DETAIL:  Key (id)=(19311) is still referenced from table "entry_to_reply_context".

Offer OPML export/publishing

I'd like to publish the list of the websites I follow, for that it would be nice if one could download the OPML of the websites. This could be later used to import it in some other reader or instance of woodwind.

mysterious exception "can't adapt type 'FeedParserDict'"

When subscribing to https://elliottucker.net/

sqlalchemy.exc.ProgrammingError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (psycopg2.ProgrammingError) can't adapt type 'FeedParserDict' [SQL: 'INSERT INTO feed (name, origin, feed, type, last_updated, last_checked, etag, push_hub, push_topic, push_verified, push_expiry, push_secret, last_pinged) VALUES (%(name)s, %(origin)s, %(feed)s, %(type)s, %(last_updated)s, %(last_checked)s, %(etag)s, %(push_hub)s, %(push_topic)s, %(push_verified)s, %(push_expiry)s, %(push_secret)s, %(last_pinged)s) RETURNING feed.id'] [parameters: {'type': 'xml', 'push_secret': None, 'etag': None, 'last_pinged': None, 'push_verified': None, 'origin': 'https://elliottucker.net/', 'push_topic': None, 'push_expiry': None, 'last_updated': None, 'name': {}, 'feed': 'https://elliottucker.net/feeds/all.atom.xml', 'last_checked': None, 'push_hub': None}]
[pid: 31348|app: 0|req: 11/11] 127.0.0.1 () {50 vars in 1090 bytes} [Mon Jun  1 07:45:56 2015] POST /subscribe => generated 0 bytes in 2464 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)

cc @elliottucker, I'm not sure what's causing this yet!

Failure to reply/fav/repost

I got a bunch of indieweb blog subscribed into woodwind. I log in with my own website.
I configured interaction to be based on IndiePub in the settings page.

When I try to reply from woodwind, I just see a "Failure" message without more explanations
screenshot_56

is this error/behavior due to my Known site? anything I can do to test it more thoroughly ?

Reply chains

Collect reply chains (especially when we subscribe to all participants) so that you don't get these weird, out-of-order repetitious entries from a series of tweets

benwerd-tweetstorm

Explain how to start in README

I, and I think others too, would be able to help fix bugs and perhaps commit some features too, but it is not really obvious what we need to get it started. I guess one needs some database and it seems to be written with help of some framework which I don't recognize, a couple of lines on how to start the app would help a lot.

OPML Import

Support importing of legacy OPML format for feeds. Allow individuals to 'upgrade' from RSS to HTML.

503 from my server

Hi, I'm not sure whether this is the right place to ask, but @withknown suggested I try.

I am experimenting with indieweb using my domain vaviblog.com which is hosted by indiehosters.

I created an account at woodwind.xyz to see whether that would make life easier for sharing.

When I use micropub as my reply mechanism, I get failure with reply but success with repost. I get failure with starring too.

When I use configurable action URLs, using the model you suggest for Known, I get a 503 error for every single option.

Unfortunately, I have no access to the server logs. I asked the person who operates indiehosters and he said he could not see any 503 errors in the log.

Any suggestions as to how I might track down the problem?

Logo/menu positioning suggestion

Just a suggestion:

Setting the h1 and the navigaiton ul to display: inline-block; line-height: 64px; vertical-align: middle; will make the navigation vertically 'center' with the logo. Sans the floats, the order of the elements would need to change too. It should wrap at lower resolutions automatically.

SQLite not supported anymore

Somehow I think there is something missing in the requirements.txt because I get this error when I try to initialize the db:

➜ jeena@Lala woodwind (master) python init_db.py
Traceback (most recent call last):
  File "init_db.py", line 3, in <module>
    from woodwind import create_app
  File "/Users/jeena/Projects/woodwind/woodwind/__init__.py", line 1, in <module>
    from .app import create_app
  File "/Users/jeena/Projects/woodwind/woodwind/app.py", line 1, in <module>
    from woodwind import extensions
  File "/Users/jeena/Projects/woodwind/woodwind/extensions.py", line 1, in <module>
    from flask.ext.login import LoginManager
ImportError: No module named flask.ext.login

Any tips on how to get this working?

Authentication error?

I have used WoodWind for a while. Recently I deleted my browser cache and cookies and wanted to use WoodWind again, but for some reason I cannot get authenticated. I'm not sure what is causing it. It was working fine, but I did update Known a few times with the most recent commit in Github.

Firstly after giving it my website (https://tinokremer.nl) it asks me to authenticate
2016-02-02_160815

Then this happens:
2016-02-02_160824

In my logs I see no errors. I'm not sure if this is caused by me or WoodWind.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.