Adding create API endpoint

This commit is contained in:
Yusur 2019-10-31 16:38:43 +01:00
parent 0b7711fe26
commit 09172d9c1e
3 changed files with 31 additions and 2 deletions

View file

@ -11,7 +11,7 @@
* Added the capability to change password. * Added the capability to change password.
* Corrected a bug into `pwdhash`: it accepted an argument, but pulled data from the form instead of processing it. Now it uses the argument. * Corrected a bug into `pwdhash`: it accepted an argument, but pulled data from the form instead of processing it. Now it uses the argument.
* Schema changes: added column `telegram` to `UserProfile` table. To update schema, execute the script `migrate_0_6_to_0_7.py` * Schema changes: added column `telegram` to `UserProfile` table. To update schema, execute the script `migrate_0_6_to_0_7.py`
* Adding public API. Each of the API endpoints take a mandatory query string argument: the access token, generated by a separate endpoint at `/get_access_token` and stored into the client. All API routes start with `/api/V1`. Added endpoints `feed`. * Adding public API. Each of the API endpoints take a mandatory query string argument: the access token, generated by a separate endpoint at `/get_access_token` and stored into the client. All API routes start with `/api/V1`. Added endpoints `feed` and `create`.
## 0.6.0 ## 0.6.0

View file

@ -78,8 +78,8 @@ def uploads(id, type='jpg'):
@app.route('/get_access_token', methods=['POST']) @app.route('/get_access_token', methods=['POST'])
def send_access_token(): def send_access_token():
try: try:
data = request.get_json(True)
try: try:
data = request.json
user = User.get( user = User.get(
(User.username == data['username']) & (User.username == data['username']) &
(User.password == pwdhash(data['password']))) (User.password == pwdhash(data['password'])))

View file

@ -65,3 +65,32 @@ def feed(self):
for message in query: for message in query:
timeline_media.append(get_message_info(message)) timeline_media.append(get_message_info(message))
return {'timeline_media': timeline_media} return {'timeline_media': timeline_media}
@bp.route('/create', methods=['POST'])
@validate_access
def create(self):
data = request.get_json(True)
text = data['text']
privacy = int(data.get('privacy', 0))
message = Message.create(
user=self,
text=text,
pub_date=datetime.datetime.now(),
privacy=privacy)
# Currently, API does not support files.
# create mentions
mention_usernames = set()
for mo in re.finditer(r'\+([A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*)', text):
mention_usernames.add(mo.group(1))
# to avoid self mention
mention_usernames.difference_update({self.username})
for u in mention_usernames:
try:
mention_user = User.get(User.username == u)
if privacy in (MSGPRV_PUBLIC, MSGPRV_UNLISTED) or \
(privacy == MSGPRV_FRIENDS and
mention_user.is_following(self) and
self.is_following(mention_user)):
push_notification('mention', mention_user, user=user.id)
except User.DoesNotExist:
pass