~chicharreros/magicicada-server/trunk

« back to all changes in this revision

Viewing changes to magicicada/server/server.py

  • Committer: Magicicada Bot
  • Author(s): Facundo Batista
  • Date: 2017-01-08 23:37:32 UTC
  • mfrom: (79.1.2 publicfiles)
  • Revision ID: magicicada_bot-20170108233732-faaeoq6sc9jorgue
[r=nataliabidart] Support public files changing and listing through the normal Server.

Show diffs side-by-side

added added

removed removed

Lines of Context:
535
535
        request = Unlink(self, message)
536
536
        request.start()
537
537
 
 
538
    def handle_LIST_PUBLIC_FILES(self, message):
 
539
        """Handle LIST_PUBLIC_FILES message."""
 
540
        request = ListPublicFiles(self, message)
 
541
        request.start()
 
542
 
 
543
    def handle_CHANGE_PUBLIC_ACCESS(self, message):
 
544
        """Handle UNLINK message."""
 
545
        request = ChangePublicAccess(self, message)
 
546
        request.start()
 
547
 
538
548
    def handle_CREATE_UDF(self, message):
539
549
        """Handle CREATE_UDF message."""
540
550
        request = CreateUDF(self, message)
1299
1309
            share_id, node_id, kind, mime, extension)
1300
1310
 
1301
1311
 
 
1312
class ListPublicFiles(SimpleRequestResponse):
 
1313
    """LIST_PUBLIC_FILES Request Response."""
 
1314
 
 
1315
    __slots__ = ()
 
1316
 
 
1317
    @inlineCallbacks
 
1318
    def _process(self):
 
1319
        """List public files for the client."""
 
1320
        user = self.protocol.user
 
1321
        public_files = yield user.list_public_files()
 
1322
 
 
1323
        counter = 0
 
1324
        for node in public_files:
 
1325
            message = protocol_pb2.Message()
 
1326
            message.type = protocol_pb2.Message.PUBLIC_FILE_INFO
 
1327
            message.public_file_info.share = node.volume_id or ''
 
1328
            message.public_file_info.node = str(node.id)
 
1329
            message.public_file_info.is_public = node.is_public
 
1330
            message.public_file_info.public_url = str(node.public_url)
 
1331
            self.sendMessage(message)
 
1332
            counter += 1
 
1333
 
 
1334
        # we're done!
 
1335
        self.length = counter
 
1336
        response = protocol_pb2.Message()
 
1337
        response.type = protocol_pb2.Message.PUBLIC_FILE_INFO_END
 
1338
        self.sendMessage(response)
 
1339
 
 
1340
        # save data to be logged on operation end
 
1341
        self.operation_data = 'public_files=%d' % len(public_files)
 
1342
 
 
1343
 
 
1344
class ChangePublicAccess(SimpleRequestResponse):
 
1345
    """CHANGE_PUBLIC_ACCESS Request Response."""
 
1346
 
 
1347
    __slots__ = ()
 
1348
 
 
1349
    expected_foreign_errors = [dataerror.NoPermission]
 
1350
 
 
1351
    user_activity = 'sync_activity'
 
1352
 
 
1353
    def _get_node_info(self):
 
1354
        """Return node info from the message."""
 
1355
        node_id = self.source_message.change_public_access.node
 
1356
        return 'node: %r' % (node_id,)
 
1357
 
 
1358
    @inlineCallbacks
 
1359
    def _process(self):
 
1360
        """Change the public access to a node."""
 
1361
        share_id = self.convert_share_id(
 
1362
            self.source_message.change_public_access.share)
 
1363
        node_id = self.source_message.change_public_access.node
 
1364
        is_public = self.source_message.change_public_access.is_public
 
1365
        public_url = yield self.protocol.user.change_public_access(
 
1366
            share_id, node_id, is_public, session_id=self.protocol.session_id)
 
1367
 
 
1368
        # answer the ok to original user
 
1369
        response = protocol_pb2.Message()
 
1370
        response.public_url = bytes(public_url)
 
1371
        response.type = protocol_pb2.Message.OK
 
1372
        self.sendMessage(response)
 
1373
 
 
1374
        # save data to be logged on operation end
 
1375
        self.operation_data = (
 
1376
            'vol_id=%s node_id=%s is_public=%s public_url=%r' % (
 
1377
                share_id, node_id, is_public, public_url))
 
1378
 
 
1379
 
1302
1380
class BytesMessageProducer(object):
1303
1381
    """Adapt a bytes producer to produce BYTES messages."""
1304
1382