Skip to content

Commit d3261c4

Browse files
consume userAndRole instead of AuthenticationInfo
1 parent a3ca800 commit d3261c4

File tree

5 files changed

+54
-84
lines changed

5 files changed

+54
-84
lines changed

zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,49 +17,36 @@
1717

1818
package org.apache.zeppelin.rest;
1919

20-
import java.io.IOException;
21-
import java.util.HashMap;
22-
import java.util.HashSet;
23-
import java.util.List;
24-
import java.util.Map;
25-
import java.util.Set;
26-
import javax.ws.rs.DELETE;
27-
import javax.ws.rs.GET;
28-
import javax.ws.rs.POST;
29-
import javax.ws.rs.PUT;
30-
import javax.ws.rs.Path;
31-
import javax.ws.rs.PathParam;
32-
import javax.ws.rs.Produces;
33-
import javax.ws.rs.QueryParam;
34-
import javax.ws.rs.core.Response;
35-
import javax.ws.rs.core.Response.Status;
36-
3720
import com.google.common.collect.Sets;
3821
import com.google.common.reflect.TypeToken;
3922
import com.google.gson.Gson;
4023
import org.apache.commons.lang3.StringUtils;
41-
import org.apache.zeppelin.interpreter.InterpreterResult;
42-
import org.apache.zeppelin.scheduler.Job;
43-
import org.apache.zeppelin.utils.InterpreterBindingUtils;
44-
import org.quartz.CronExpression;
45-
import org.slf4j.Logger;
46-
import org.slf4j.LoggerFactory;
47-
4824
import org.apache.zeppelin.annotation.ZeppelinApi;
25+
import org.apache.zeppelin.interpreter.InterpreterResult;
4926
import org.apache.zeppelin.notebook.Note;
5027
import org.apache.zeppelin.notebook.Notebook;
5128
import org.apache.zeppelin.notebook.NotebookAuthorization;
5229
import org.apache.zeppelin.notebook.Paragraph;
5330
import org.apache.zeppelin.rest.message.CronRequest;
54-
import org.apache.zeppelin.types.InterpreterSettingsList;
5531
import org.apache.zeppelin.rest.message.NewNotebookRequest;
5632
import org.apache.zeppelin.rest.message.NewParagraphRequest;
5733
import org.apache.zeppelin.rest.message.RunParagraphWithParametersRequest;
5834
import org.apache.zeppelin.search.SearchService;
5935
import org.apache.zeppelin.server.JsonResponse;
6036
import org.apache.zeppelin.socket.NotebookServer;
37+
import org.apache.zeppelin.types.InterpreterSettingsList;
6138
import org.apache.zeppelin.user.AuthenticationInfo;
39+
import org.apache.zeppelin.utils.InterpreterBindingUtils;
6240
import org.apache.zeppelin.utils.SecurityUtils;
41+
import org.quartz.CronExpression;
42+
import org.slf4j.Logger;
43+
import org.slf4j.LoggerFactory;
44+
45+
import javax.ws.rs.*;
46+
import javax.ws.rs.core.Response;
47+
import javax.ws.rs.core.Response.Status;
48+
import java.io.IOException;
49+
import java.util.*;
6350

6451
/**
6552
* Rest api endpoint for the noteBook.
@@ -198,7 +185,8 @@ public Response bind(@PathParam("noteId") String noteId) {
198185
@ZeppelinApi
199186
public Response getNotebookList() throws IOException {
200187
AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
201-
List<Map<String, String>> notesInfo = notebookServer.generateNotebooksInfo(false, subject);
188+
List<Map<String, String>> notesInfo = notebookServer.generateNotebooksInfo(false, subject,
189+
SecurityUtils.getRoles());
202190
return new JsonResponse<>(Status.OK, "", notesInfo).build();
203191
}
204192

@@ -277,7 +265,7 @@ public Response createNote(String message) throws IOException {
277265
note.setName(noteName);
278266
note.persist(subject);
279267
notebookServer.broadcastNote(note);
280-
notebookServer.broadcastNoteList(subject);
268+
notebookServer.broadcastNoteList(subject, SecurityUtils.getRoles());
281269
return new JsonResponse<>(Status.CREATED, "", note.getId()).build();
282270
}
283271

@@ -301,7 +289,7 @@ public Response deleteNote(@PathParam("notebookId") String notebookId) throws IO
301289
}
302290
}
303291

304-
notebookServer.broadcastNoteList(subject);
292+
notebookServer.broadcastNoteList(subject, SecurityUtils.getRoles());
305293
return new JsonResponse<>(Status.OK, "").build();
306294
}
307295

@@ -326,7 +314,7 @@ public Response cloneNote(@PathParam("notebookId") String notebookId, String mes
326314
AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
327315
Note newNote = notebook.cloneNote(notebookId, newNoteName, subject);
328316
notebookServer.broadcastNote(newNote);
329-
notebookServer.broadcastNoteList(subject);
317+
notebookServer.broadcastNoteList(subject, SecurityUtils.getRoles());
330318
return new JsonResponse<>(Status.CREATED, "", newNote.getId()).build();
331319
}
332320

zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.google.gson.Gson;
2121
import com.google.gson.GsonBuilder;
2222
import com.google.gson.reflect.TypeToken;
23-
2423
import org.apache.commons.lang.StringUtils;
2524
import org.apache.zeppelin.conf.ZeppelinConfiguration;
2625
import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars;
@@ -165,10 +164,10 @@ public void onMessage(NotebookSocket conn, String msg) {
165164
/** Lets be elegant here */
166165
switch (messagereceived.op) {
167166
case LIST_NOTES:
168-
unicastNoteList(conn, subject);
167+
unicastNoteList(conn, subject, userAndRoles);
169168
break;
170169
case RELOAD_NOTES_FROM_REPO:
171-
broadcastReloadedNoteList(subject);
170+
broadcastReloadedNoteList(subject, userAndRoles);
172171
break;
173172
case GET_HOME_NOTE:
174173
sendHomeNote(conn, userAndRoles, notebook, messagereceived);
@@ -459,7 +458,7 @@ public void getInterpreterBindings(NotebookSocket conn, Message fromMessage)
459458
}
460459

461460
public List<Map<String, String>> generateNotebooksInfo(boolean needsReload,
462-
AuthenticationInfo subject) {
461+
AuthenticationInfo subject, HashSet<String> userAndRoles) {
463462

464463
Notebook notebook = notebook();
465464

@@ -475,7 +474,7 @@ public List<Map<String, String>> generateNotebooksInfo(boolean needsReload,
475474
LOG.error("Fail to reload notes from repository", e);
476475
}
477476
}
478-
List<Note> notes = notebook.getAllNotes(subject);
477+
List<Note> notes = notebook.getAllNotes(userAndRoles);
479478
List<Map<String, String>> notesInfo = new LinkedList<>();
480479
for (Note note : notes) {
481480
Map<String, String> info = new HashMap<>();
@@ -502,18 +501,21 @@ public void broadcastInterpreterBindings(String noteId,
502501
.put("interpreterBindings", settingList));
503502
}
504503

505-
public void broadcastNoteList(AuthenticationInfo subject) {
506-
List<Map<String, String>> notesInfo = generateNotebooksInfo(false, subject);
504+
public void broadcastNoteList(AuthenticationInfo subject,
505+
HashSet<String> userAndRoles) {
506+
List<Map<String, String>> notesInfo = generateNotebooksInfo(false, subject, userAndRoles);
507507
broadcastAll(new Message(OP.NOTES_INFO).put("notes", notesInfo));
508508
}
509509

510-
public void unicastNoteList(NotebookSocket conn, AuthenticationInfo subject) {
511-
List<Map<String, String>> notesInfo = generateNotebooksInfo(false, subject);
510+
public void unicastNoteList(NotebookSocket conn, AuthenticationInfo subject,
511+
HashSet<String> userAndRoles) {
512+
List<Map<String, String>> notesInfo = generateNotebooksInfo(false, subject, userAndRoles);
512513
unicast(new Message(OP.NOTES_INFO).put("notes", notesInfo), conn);
513514
}
514515

515-
public void broadcastReloadedNoteList(AuthenticationInfo subject) {
516-
List<Map<String, String>> notesInfo = generateNotebooksInfo(true, subject);
516+
public void broadcastReloadedNoteList(AuthenticationInfo subject,
517+
HashSet<String> userAndRoles) {
518+
List<Map<String, String>> notesInfo = generateNotebooksInfo(true, subject, userAndRoles);
517519
broadcastAll(new Message(OP.NOTES_INFO).put("notes", notesInfo));
518520
}
519521

@@ -617,7 +619,7 @@ private void updateNote(NotebookSocket conn, HashSet<String> userAndRoles,
617619
AuthenticationInfo subject = new AuthenticationInfo(fromMessage.principal);
618620
note.persist(subject);
619621
broadcastNote(note);
620-
broadcastNoteList(subject);
622+
broadcastNoteList(subject, userAndRoles);
621623
}
622624
}
623625

@@ -652,7 +654,7 @@ private void createNote(NotebookSocket conn, HashSet<String> userAndRoles,
652654
note.persist(subject);
653655
addConnectionToNote(note.getId(), (NotebookSocket) conn);
654656
conn.send(serializeMessage(new Message(OP.NEW_NOTE).put("note", note)));
655-
broadcastNoteList(subject);
657+
broadcastNoteList(subject, userAndRoles);
656658
}
657659

658660
private void removeNote(NotebookSocket conn, HashSet<String> userAndRoles,
@@ -674,7 +676,7 @@ private void removeNote(NotebookSocket conn, HashSet<String> userAndRoles,
674676
AuthenticationInfo subject = new AuthenticationInfo(fromMessage.principal);
675677
notebook.removeNote(noteId, subject);
676678
removeNote(noteId);
677-
broadcastNoteList(subject);
679+
broadcastNoteList(subject, userAndRoles);
678680
}
679681

680682
private void updateParagraph(NotebookSocket conn, HashSet<String> userAndRoles,
@@ -716,7 +718,7 @@ private void cloneNote(NotebookSocket conn, HashSet<String> userAndRoles,
716718
AuthenticationInfo subject = new AuthenticationInfo(fromMessage.principal);
717719
addConnectionToNote(newNote.getId(), (NotebookSocket) conn);
718720
conn.send(serializeMessage(new Message(OP.NEW_NOTE).put("note", newNote)));
719-
broadcastNoteList(subject);
721+
broadcastNoteList(subject, userAndRoles);
720722
}
721723

722724
protected Note importNote(NotebookSocket conn, HashSet<String> userAndRoles,
@@ -733,7 +735,7 @@ protected Note importNote(NotebookSocket conn, HashSet<String> userAndRoles,
733735
note = notebook.importNote(noteJson, noteName, subject);
734736
note.persist(subject);
735737
broadcastNote(note);
736-
broadcastNoteList(subject);
738+
broadcastNoteList(subject, userAndRoles);
737739
}
738740
return note;
739741
}

zeppelin-server/src/test/java/org/apache/zeppelin/integration/AuthenticationIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public void testGroupPermission() throws Exception {
202202
try {
203203
WebElement element = pollingWait(By.xpath("//*[@id='notebook-names']//a[contains(@href, '" + noteId + "')]"),
204204
MAX_BROWSER_TIMEOUT_SEC);
205-
collector.checkThat("Check is user has permission to view this notebook link", false,
205+
collector.checkThat("Check is user has permission to view this notebook link", true,
206206
CoreMatchers.equalTo(element.isDisplayed()));
207207
} catch (Exception e) {
208208
//This should have failed, nothing to worry.

zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,12 @@
1717

1818
package org.apache.zeppelin.notebook;
1919

20-
import java.io.IOException;
21-
import java.io.StringReader;
22-
import java.util.ArrayList;
23-
import java.util.Collections;
24-
import java.util.Comparator;
25-
import java.util.Date;
26-
import java.util.HashMap;
27-
import java.util.HashSet;
28-
import java.util.LinkedHashMap;
29-
import java.util.LinkedList;
30-
import java.util.List;
31-
import java.util.Map;
32-
import java.util.Set;
33-
import java.util.concurrent.TimeUnit;
34-
3520
import com.google.common.base.Predicate;
3621
import com.google.common.collect.FluentIterable;
3722
import com.google.common.collect.Sets;
3823
import com.google.gson.Gson;
3924
import com.google.gson.GsonBuilder;
4025
import com.google.gson.stream.JsonReader;
41-
import org.apache.commons.codec.binary.StringUtils;
42-
import org.quartz.CronScheduleBuilder;
43-
import org.quartz.CronTrigger;
44-
import org.quartz.JobBuilder;
45-
import org.quartz.JobDetail;
46-
import org.quartz.JobExecutionContext;
47-
import org.quartz.JobExecutionException;
48-
import org.quartz.JobKey;
49-
import org.quartz.SchedulerException;
50-
import org.quartz.TriggerBuilder;
51-
import org.quartz.impl.StdSchedulerFactory;
52-
import org.slf4j.Logger;
53-
import org.slf4j.LoggerFactory;
54-
5526
import org.apache.zeppelin.conf.ZeppelinConfiguration;
5627
import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars;
5728
import org.apache.zeppelin.display.AngularObject;
@@ -69,6 +40,15 @@
6940
import org.apache.zeppelin.search.SearchService;
7041
import org.apache.zeppelin.user.AuthenticationInfo;
7142
import org.apache.zeppelin.user.Credentials;
43+
import org.quartz.*;
44+
import org.quartz.impl.StdSchedulerFactory;
45+
import org.slf4j.Logger;
46+
import org.slf4j.LoggerFactory;
47+
48+
import java.io.IOException;
49+
import java.io.StringReader;
50+
import java.util.*;
51+
import java.util.concurrent.TimeUnit;
7252

7353
/**
7454
* Collection of Notes.
@@ -535,10 +515,10 @@ public int compare(Note note1, Note note2) {
535515
}
536516
}
537517

538-
public List<Note> getAllNotes(AuthenticationInfo subject) {
518+
public List<Note> getAllNotes(HashSet<String> userAndRoles) {
539519
final Set<String> entities = Sets.newHashSet();
540-
if (subject != null) {
541-
entities.add(subject.getUser());
520+
if (userAndRoles != null) {
521+
entities.addAll(userAndRoles);
542522
}
543523

544524
synchronized (notes) {

zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -857,20 +857,20 @@ public void testNormalizeNoteName() throws IOException {
857857
public void testGetAllNotes() throws Exception {
858858
Note note1 = notebook.createNote(null);
859859
Note note2 = notebook.createNote(null);
860-
assertEquals(2, notebook.getAllNotes(new AuthenticationInfo("anonymous")).size());
860+
assertEquals(2, notebook.getAllNotes(Sets.newHashSet("anonymous")).size());
861861

862862
notebook.getNotebookAuthorization().setOwners(note1.getId(), Sets.newHashSet("user1"));
863863
notebook.getNotebookAuthorization().setWriters(note1.getId(), Sets.newHashSet("user1"));
864864
notebook.getNotebookAuthorization().setReaders(note1.getId(), Sets.newHashSet("user1"));
865-
assertEquals(1, notebook.getAllNotes(new AuthenticationInfo("anonymous")).size());
866-
assertEquals(2, notebook.getAllNotes(new AuthenticationInfo("user1")).size());
865+
assertEquals(1, notebook.getAllNotes(Sets.newHashSet("anonymous")).size());
866+
assertEquals(2, notebook.getAllNotes(Sets.newHashSet("user1")).size());
867867

868868
notebook.getNotebookAuthorization().setOwners(note2.getId(), Sets.newHashSet("user2"));
869869
notebook.getNotebookAuthorization().setWriters(note2.getId(), Sets.newHashSet("user2"));
870870
notebook.getNotebookAuthorization().setReaders(note2.getId(), Sets.newHashSet("user2"));
871-
assertEquals(0, notebook.getAllNotes(new AuthenticationInfo("anonymous")).size());
872-
assertEquals(1, notebook.getAllNotes(new AuthenticationInfo("user1")).size());
873-
assertEquals(1, notebook.getAllNotes(new AuthenticationInfo("user2")).size());
871+
assertEquals(0, notebook.getAllNotes(Sets.newHashSet("anonymous")).size());
872+
assertEquals(1, notebook.getAllNotes(Sets.newHashSet("user1")).size());
873+
assertEquals(1, notebook.getAllNotes(Sets.newHashSet("user2")).size());
874874
}
875875

876876
private void delete(File file){

0 commit comments

Comments
 (0)