Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
...and here's the actual impl. git fail.
Browse files Browse the repository at this point in the history
  • Loading branch information
ara4n committed Feb 7, 2015
1 parent f02bf64 commit 582019f
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 25 deletions.
14 changes: 14 additions & 0 deletions synapse/handlers/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,20 @@ def register(self, localpart=None, password=None):
raise RegistrationError(
500, "Cannot generate user ID.")

# create a default avatar for the user
# XXX: ideally clients would explicitly specify one, but given they don't
# and we want consistent and pretty identicons for random users, we'll
# do it here.
auth_user = UserID.from_string(user_id)
identicon_resource = self.hs.get_resource_for_media_repository().getChildWithDefault("identicon", None)
upload_resource = self.hs.get_resource_for_media_repository().getChildWithDefault("upload", None)
identicon_bytes = identicon_resource.generate_identicon(user_id, 320, 320)
content_uri = yield upload_resource.create_content(
"image/png", None, identicon_bytes, len(identicon_bytes), auth_user
)
profile_handler = self.hs.get_handlers().profile_handler
profile_handler.set_avatar_url(auth_user, auth_user, ("%s#auto" % content_uri))

defer.returnValue((user_id, token))

@defer.inlineCallbacks
Expand Down
57 changes: 32 additions & 25 deletions synapse/rest/media/v1/upload_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,35 @@ def render_POST(self, request):
def render_OPTIONS(self, request):
respond_with_json(request, 200, {}, send_cors=True)
return NOT_DONE_YET

@defer.inlineCallbacks
def create_content(self, media_type, upload_name, content, content_length, auth_user):
media_id = random_string(24)

fname = self.filepaths.local_media_filepath(media_id)
self._makedirs(fname)

# This shouldn't block for very long because the content will have
# already been uploaded at this point.
with open(fname, "wb") as f:
f.write(content)

yield self.store.store_local_media(
media_id=media_id,
media_type=media_type,
time_now_ms=self.clock.time_msec(),
upload_name=upload_name,
media_length=content_length,
user_id=auth_user,
)
media_info = {
"media_type": media_type,
"media_length": content_length,
}

yield self._generate_local_thumbnails(media_id, media_info)

defer.returnValue("mxc://%s/%s" % (self.server_name, media_id))

@defer.inlineCallbacks
def _async_render_POST(self, request):
Expand Down Expand Up @@ -70,32 +99,10 @@ def _async_render_POST(self, request):
# disposition = headers.getRawHeaders("Content-Disposition")[0]
# TODO(markjh): parse content-dispostion

media_id = random_string(24)

fname = self.filepaths.local_media_filepath(media_id)
self._makedirs(fname)

# This shouldn't block for very long because the content will have
# already been uploaded at this point.
with open(fname, "wb") as f:
f.write(request.content.read())

yield self.store.store_local_media(
media_id=media_id,
media_type=media_type,
time_now_ms=self.clock.time_msec(),
upload_name=None,
media_length=content_length,
user_id=auth_user,
content_uri = yield self.create_content(
media_type, None, request.content.read(),
content_length, auth_user
)
media_info = {
"media_type": media_type,
"media_length": content_length,
}

yield self._generate_local_thumbnails(media_id, media_info)

content_uri = "mxc://%s/%s" % (self.server_name, media_id)

respond_with_json(
request, 200, {"content_uri": content_uri}, send_cors=True
Expand Down

0 comments on commit 582019f

Please sign in to comment.