mirror of
				https://github.com/ether/etherpad-lite.git
				synced 2025-10-31 08:11:10 +01:00 
			
		
		
		
	Merge pull request #1358 from mluto/clientvars-hook
Make the creation of clientVars hookable
This commit is contained in:
		
						commit
						5eb09f981b
					
				| @ -175,6 +175,27 @@ function handleMessage ( hook, context, callback ) { | |||||||
| }; | }; | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | ## clientVars | ||||||
|  | Called from: src/node/handler/PadMessageHandler.js | ||||||
|  | 
 | ||||||
|  | Things in context: | ||||||
|  | 
 | ||||||
|  | 1. clientVars - the basic `clientVars` built by the core | ||||||
|  | 2. pad - the pad this session is about | ||||||
|  | 
 | ||||||
|  | This hook will be called once a client connects and the `clientVars` are being sent. Plugins can use this hook to give the client a initial configuriation, like the tracking-id of an external analytics-tool that is used on the client-side. You can also overwrite values from the original `clientVars`. | ||||||
|  | 
 | ||||||
|  | Example: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | exports.clientVars = function(hook, context, callback) | ||||||
|  | { | ||||||
|  |   // tell the client which year we are in | ||||||
|  |   return callback({ "currentYear": new Date().getFullYear() }); | ||||||
|  | }; | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | This can be accessed on the client-side using `clientVars.currentYear`. | ||||||
| 
 | 
 | ||||||
| ## getLineHTMLForExport | ## getLineHTMLForExport | ||||||
| Called from: src/node/utils/ExportHtml.js | Called from: src/node/utils/ExportHtml.js | ||||||
|  | |||||||
| @ -990,71 +990,7 @@ function handleClientReady(client, message) | |||||||
|        |        | ||||||
|       //Saves in pad2sessions that this session belongs to this pad
 |       //Saves in pad2sessions that this session belongs to this pad
 | ||||||
|       pad2sessions[padIds.padId].push(client.id); |       pad2sessions[padIds.padId].push(client.id); | ||||||
|        |              | ||||||
|       //prepare all values for the wire
 |  | ||||||
|       var atext = Changeset.cloneAText(pad.atext); |  | ||||||
|       var attribsForWire = Changeset.prepareForWire(atext.attribs, pad.pool); |  | ||||||
|       var apool = attribsForWire.pool.toJsonable(); |  | ||||||
|       atext.attribs = attribsForWire.translated; |  | ||||||
|        |  | ||||||
|       // Warning: never ever send padIds.padId to the client. If the
 |  | ||||||
|       // client is read only you would open a security hole 1 swedish
 |  | ||||||
|       // mile wide...
 |  | ||||||
|       var clientVars = { |  | ||||||
|         "accountPrivs": { |  | ||||||
|             "maxRevisions": 100 |  | ||||||
|         }, |  | ||||||
|         "initialRevisionList": [], |  | ||||||
|         "initialOptions": { |  | ||||||
|             "guestPolicy": "deny" |  | ||||||
|         }, |  | ||||||
|         "savedRevisions": pad.getSavedRevisions(), |  | ||||||
|         "collab_client_vars": { |  | ||||||
|             "initialAttributedText": atext, |  | ||||||
|             "clientIp": "127.0.0.1", |  | ||||||
|             //"clientAgent": "Anonymous Agent",
 |  | ||||||
|             "padId": message.padId, |  | ||||||
|             "historicalAuthorData": historicalAuthorData, |  | ||||||
|             "apool": apool, |  | ||||||
|             "rev": pad.getHeadRevisionNumber(), |  | ||||||
|             "globalPadId": message.padId, |  | ||||||
|             "time": currentTime, |  | ||||||
|         }, |  | ||||||
|         "colorPalette": ["#ffc7c7", "#fff1c7", "#e3ffc7", "#c7ffd5", "#c7ffff", "#c7d5ff", "#e3c7ff", "#ffc7f1", "#ff8f8f", "#ffe38f", "#c7ff8f", "#8fffab", "#8fffff", "#8fabff", "#c78fff", "#ff8fe3", "#d97979", "#d9c179", "#a9d979", "#79d991", "#79d9d9", "#7991d9", "#a979d9", "#d979c1", "#d9a9a9", "#d9cda9", "#c1d9a9", "#a9d9b5", "#a9d9d9", "#a9b5d9", "#c1a9d9", "#d9a9cd", "#4c9c82", "#12d1ad", "#2d8e80", "#7485c3", "#a091c7", "#3185ab", "#6818b4", "#e6e76d", "#a42c64", "#f386e5", "#4ecc0c", "#c0c236", "#693224", "#b5de6a", "#9b88fd", "#358f9b", "#496d2f", "#e267fe", "#d23056", "#1a1a64", "#5aa335", "#d722bb", "#86dc6c", "#b5a714", "#955b6a", "#9f2985", "#4b81c8", "#3d6a5b", "#434e16", "#d16084", "#af6a0e", "#8c8bd8"], |  | ||||||
|         "clientIp": "127.0.0.1", |  | ||||||
|         "userIsGuest": true, |  | ||||||
|         "userColor": authorColorId, |  | ||||||
|         "padId": message.padId, |  | ||||||
|         "initialTitle": "Pad: " + message.padId, |  | ||||||
|         "opts": {}, |  | ||||||
|         // tell the client the number of the latest chat-message, which will be 
 |  | ||||||
|         // used to request the latest 100 chat-messages later (GET_CHAT_MESSAGES)
 |  | ||||||
|         "chatHead": pad.chatHead, |  | ||||||
|         "numConnectedUsers": pad2sessions[padIds.padId].length, |  | ||||||
|         "isProPad": false, |  | ||||||
|         "readOnlyId": padIds.readOnlyPadId, |  | ||||||
|         "readonly": padIds.readonly, |  | ||||||
|         "serverTimestamp": new Date().getTime(), |  | ||||||
|         "globalPadId": message.padId, |  | ||||||
|         "userId": author, |  | ||||||
|         "cookiePrefsToSet": { |  | ||||||
|             "fullWidth": false, |  | ||||||
|             "hideSidebar": false |  | ||||||
|         }, |  | ||||||
|         "abiwordAvailable": settings.abiwordAvailable(),  |  | ||||||
|         "plugins": { |  | ||||||
|           "plugins": plugins.plugins, |  | ||||||
|           "parts": plugins.parts, |  | ||||||
|         }, |  | ||||||
|         "initialChangesets": [] // FIXME: REMOVE THIS SHIT
 |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       //Add a username to the clientVars if one avaiable
 |  | ||||||
|       if(authorName != null) |  | ||||||
|       { |  | ||||||
|         clientVars.userName = authorName; |  | ||||||
|       } |  | ||||||
|        |  | ||||||
|       //If this is a reconnect, we don't have to send the client the ClientVars again
 |       //If this is a reconnect, we don't have to send the client the ClientVars again
 | ||||||
|       if(message.reconnect == true) |       if(message.reconnect == true) | ||||||
|       { |       { | ||||||
| @ -1064,10 +1000,85 @@ function handleClientReady(client, message) | |||||||
|       //This is a normal first connect
 |       //This is a normal first connect
 | ||||||
|       else |       else | ||||||
|       { |       { | ||||||
|         //Send the clientVars to the Client
 |         //prepare all values for the wire
 | ||||||
|         client.json.send({type: "CLIENT_VARS", data: clientVars}); |         var atext = Changeset.cloneAText(pad.atext); | ||||||
|         //Save the current revision in sessioninfos, should be the same as in clientVars
 |         var attribsForWire = Changeset.prepareForWire(atext.attribs, pad.pool); | ||||||
|         sessioninfos[client.id].rev = pad.getHeadRevisionNumber(); |         var apool = attribsForWire.pool.toJsonable(); | ||||||
|  |         atext.attribs = attribsForWire.translated; | ||||||
|  |          | ||||||
|  |         // Warning: never ever send padIds.padId to the client. If the
 | ||||||
|  |         // client is read only you would open a security hole 1 swedish
 | ||||||
|  |         // mile wide...
 | ||||||
|  |         var clientVars = { | ||||||
|  |           "accountPrivs": { | ||||||
|  |               "maxRevisions": 100 | ||||||
|  |           }, | ||||||
|  |           "initialRevisionList": [], | ||||||
|  |           "initialOptions": { | ||||||
|  |               "guestPolicy": "deny" | ||||||
|  |           }, | ||||||
|  |           "savedRevisions": pad.getSavedRevisions(), | ||||||
|  |           "collab_client_vars": { | ||||||
|  |               "initialAttributedText": atext, | ||||||
|  |               "clientIp": "127.0.0.1", | ||||||
|  |               "padId": message.padId, | ||||||
|  |               "historicalAuthorData": historicalAuthorData, | ||||||
|  |               "apool": apool, | ||||||
|  |               "rev": pad.getHeadRevisionNumber(), | ||||||
|  |               "globalPadId": message.padId, | ||||||
|  |               "time": currentTime, | ||||||
|  |           }, | ||||||
|  |           "colorPalette": ["#ffc7c7", "#fff1c7", "#e3ffc7", "#c7ffd5", "#c7ffff", "#c7d5ff", "#e3c7ff", "#ffc7f1", "#ff8f8f", "#ffe38f", "#c7ff8f", "#8fffab", "#8fffff", "#8fabff", "#c78fff", "#ff8fe3", "#d97979", "#d9c179", "#a9d979", "#79d991", "#79d9d9", "#7991d9", "#a979d9", "#d979c1", "#d9a9a9", "#d9cda9", "#c1d9a9", "#a9d9b5", "#a9d9d9", "#a9b5d9", "#c1a9d9", "#d9a9cd", "#4c9c82", "#12d1ad", "#2d8e80", "#7485c3", "#a091c7", "#3185ab", "#6818b4", "#e6e76d", "#a42c64", "#f386e5", "#4ecc0c", "#c0c236", "#693224", "#b5de6a", "#9b88fd", "#358f9b", "#496d2f", "#e267fe", "#d23056", "#1a1a64", "#5aa335", "#d722bb", "#86dc6c", "#b5a714", "#955b6a", "#9f2985", "#4b81c8", "#3d6a5b", "#434e16", "#d16084", "#af6a0e", "#8c8bd8"], | ||||||
|  |           "clientIp": "127.0.0.1", | ||||||
|  |           "userIsGuest": true, | ||||||
|  |           "userColor": authorColorId, | ||||||
|  |           "padId": message.padId, | ||||||
|  |           "initialTitle": "Pad: " + message.padId, | ||||||
|  |           "opts": {}, | ||||||
|  |           // tell the client the number of the latest chat-message, which will be 
 | ||||||
|  |           // used to request the latest 100 chat-messages later (GET_CHAT_MESSAGES)
 | ||||||
|  |           "chatHead": pad.chatHead, | ||||||
|  |           "numConnectedUsers": pad2sessions[padIds.padId].length, | ||||||
|  |           "isProPad": false, | ||||||
|  |           "readOnlyId": padIds.readOnlyPadId, | ||||||
|  |           "readonly": padIds.readonly, | ||||||
|  |           "serverTimestamp": new Date().getTime(), | ||||||
|  |           "globalPadId": message.padId, | ||||||
|  |           "userId": author, | ||||||
|  |           "cookiePrefsToSet": { | ||||||
|  |               "fullWidth": false, | ||||||
|  |               "hideSidebar": false | ||||||
|  |           }, | ||||||
|  |           "abiwordAvailable": settings.abiwordAvailable(),  | ||||||
|  |           "plugins": { | ||||||
|  |             "plugins": plugins.plugins, | ||||||
|  |             "parts": plugins.parts, | ||||||
|  |           }, | ||||||
|  |           "initialChangesets": [] // FIXME: REMOVE THIS SHIT
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         //Add a username to the clientVars if one avaiable
 | ||||||
|  |         if(authorName != null) | ||||||
|  |         { | ||||||
|  |           clientVars.userName = authorName; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         //call the clientVars-hook so plugins can modify them before they get sent to the client
 | ||||||
|  |         hooks.aCallAll("clientVars", { clientVars: clientVars, pad: pad }, function ( err, messages ) { | ||||||
|  |           if(ERR(err, callback)) return; | ||||||
|  |            | ||||||
|  |           _.each(messages, function(newVars) { | ||||||
|  |             //combine our old object with the new attributes from the hook
 | ||||||
|  |             for(var attr in newVars) { | ||||||
|  |               clientVars[attr] = newVars[attr]; | ||||||
|  |             } | ||||||
|  |           }); | ||||||
|  |          | ||||||
|  |           //Send the clientVars to the Client
 | ||||||
|  |           client.json.send({type: "CLIENT_VARS", data: clientVars}); | ||||||
|  |           //Save the current revision in sessioninfos, should be the same as in clientVars
 | ||||||
|  |           sessioninfos[client.id].rev = pad.getHeadRevisionNumber(); | ||||||
|  |         }); | ||||||
|       } |       } | ||||||
|          |          | ||||||
|       sessioninfos[client.id].author = author; |       sessioninfos[client.id].author = author; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user