5555use  OCP \AppFramework \Http \DataResponse ;
5656use  OCP \AppFramework \Http \TemplateResponse ;
5757use  OCP \AppFramework \OCSController ;
58+ use  OCP \Constants ;
5859use  OCP \DirectEditing \IManager  as  IDirectEditingManager ;
5960use  OCP \DirectEditing \RegisterDirectEditorEvent ;
6061use  OCP \EventDispatcher \IEventDispatcher ;
6465use  OCP \Files \NotPermittedException ;
6566use  OCP \Files \StorageNotAvailableException ;
6667use  OCP \IRequest ;
68+ use  OCP \ISession ;
6769use  OCP \IURLGenerator ;
6870use  OCP \Share \Exceptions \ShareNotFound ;
6971use  OCP \Share \IManager ;
@@ -95,7 +97,10 @@ class WorkspaceController extends OCSController {
9597	/** @var LoggerInterface */ 
9698	private  $ logger ;
9799
98- 	public  function  __construct ($ appName , IRequest   $ request , IRootFolder   $ rootFolder , IManager   $ shareManager , IDirectEditingManager   $ directEditingManager , IURLGenerator   $ urlGenerator ,	WorkspaceService   $ workspaceService , IEventDispatcher   $ eventDispatcher , LoggerInterface   $ logger , $ userId ) {
100+ 	/** @var ISession */ 
101+ 	private  $ session ;
102+ 
103+ 	public  function  __construct ($ appName , IRequest   $ request , IRootFolder   $ rootFolder , IManager   $ shareManager , IDirectEditingManager   $ directEditingManager , IURLGenerator   $ urlGenerator ,	WorkspaceService   $ workspaceService , IEventDispatcher   $ eventDispatcher , LoggerInterface   $ logger , ISession   $ session , $ userId ) {
99104		parent ::__construct ($ appName , $ request );
100105		$ this  ->rootFolder  = $ rootFolder ;
101106		$ this  ->shareManager  = $ shareManager ;
@@ -105,6 +110,7 @@ public function __construct($appName, IRequest $request, IRootFolder $rootFolder
105110		$ this  ->urlGenerator  = $ urlGenerator ;
106111		$ this  ->eventDispatcher  = $ eventDispatcher ;
107112		$ this  ->logger  = $ logger ;
113+ 		$ this  ->session  = $ session ;
108114	}
109115
110116	/** 
@@ -158,6 +164,15 @@ public function folder(string $path = '/'): DataResponse {
158164	public  function  publicFolder (string  $ shareToken , string  $ path  = '/ ' ): DataResponse   {
159165		try  {
160166			$ share  = $ this  ->shareManager ->getShareByToken ($ shareToken );
167+ 			if  (!($ share ->getPermissions () & Constants::PERMISSION_READ )) {
168+ 				throw  new  ShareNotFound ();
169+ 			}
170+ 			if  ($ share ->getPassword () !== null ) {
171+ 				$ shareId  = $ this  ->session ->get ('public_link_authenticated ' );
172+ 				if  ($ share ->getId () !== $ shareId ) {
173+ 					throw  new  ShareNotFound ();
174+ 				}
175+ 			}
161176			$ folder  = $ share ->getNode ()->get ($ path );
162177			if  ($ folder  instanceof  Folder) {
163178				$ file  = $ this  ->workspaceService ->getFile ($ folder );
0 commit comments