Merge "Remove ChangeControl.GenericFactory#validateFor() and migrate callers"
This commit is contained in:
@@ -24,7 +24,10 @@ import com.google.gerrit.server.CurrentUser;
|
|||||||
import com.google.gerrit.server.PatchSetUtil;
|
import com.google.gerrit.server.PatchSetUtil;
|
||||||
import com.google.gerrit.server.edit.ChangeEdit;
|
import com.google.gerrit.server.edit.ChangeEdit;
|
||||||
import com.google.gerrit.server.edit.ChangeEditUtil;
|
import com.google.gerrit.server.edit.ChangeEditUtil;
|
||||||
import com.google.gerrit.server.project.ChangeControl;
|
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||||
|
import com.google.gerrit.server.permissions.ChangePermission;
|
||||||
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.project.NoSuchChangeException;
|
import com.google.gerrit.server.project.NoSuchChangeException;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -50,22 +53,25 @@ import org.eclipse.jgit.lib.ObjectId;
|
|||||||
public class CatServlet extends HttpServlet {
|
public class CatServlet extends HttpServlet {
|
||||||
private final Provider<ReviewDb> requestDb;
|
private final Provider<ReviewDb> requestDb;
|
||||||
private final Provider<CurrentUser> userProvider;
|
private final Provider<CurrentUser> userProvider;
|
||||||
private final ChangeControl.GenericFactory changeControl;
|
|
||||||
private final ChangeEditUtil changeEditUtil;
|
private final ChangeEditUtil changeEditUtil;
|
||||||
private final PatchSetUtil psUtil;
|
private final PatchSetUtil psUtil;
|
||||||
|
private final ChangeNotes.Factory changeNotesFactory;
|
||||||
|
private final PermissionBackend permissionBackend;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CatServlet(
|
CatServlet(
|
||||||
Provider<ReviewDb> sf,
|
Provider<ReviewDb> sf,
|
||||||
ChangeControl.GenericFactory ccf,
|
|
||||||
Provider<CurrentUser> usrprv,
|
Provider<CurrentUser> usrprv,
|
||||||
ChangeEditUtil ceu,
|
ChangeEditUtil ceu,
|
||||||
PatchSetUtil psu) {
|
PatchSetUtil psu,
|
||||||
|
ChangeNotes.Factory cnf,
|
||||||
|
PermissionBackend pb) {
|
||||||
requestDb = sf;
|
requestDb = sf;
|
||||||
changeControl = ccf;
|
|
||||||
userProvider = usrprv;
|
userProvider = usrprv;
|
||||||
changeEditUtil = ceu;
|
changeEditUtil = ceu;
|
||||||
psUtil = psu;
|
psUtil = psu;
|
||||||
|
changeNotesFactory = cnf;
|
||||||
|
permissionBackend = pb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -119,34 +125,33 @@ public class CatServlet extends HttpServlet {
|
|||||||
final Change.Id changeId = patchKey.getParentKey().getParentKey();
|
final Change.Id changeId = patchKey.getParentKey().getParentKey();
|
||||||
String revision;
|
String revision;
|
||||||
try {
|
try {
|
||||||
final ReviewDb db = requestDb.get();
|
ChangeNotes notes = changeNotesFactory.createChecked(changeId);
|
||||||
final ChangeControl control = changeControl.validateFor(db, changeId, userProvider.get());
|
permissionBackend
|
||||||
|
.user(userProvider)
|
||||||
|
.change(notes)
|
||||||
|
.database(requestDb)
|
||||||
|
.check(ChangePermission.READ);
|
||||||
if (patchKey.getParentKey().get() == 0) {
|
if (patchKey.getParentKey().get() == 0) {
|
||||||
// change edit
|
// change edit
|
||||||
try {
|
Optional<ChangeEdit> edit = changeEditUtil.byChange(notes.getChange());
|
||||||
Optional<ChangeEdit> edit = changeEditUtil.byChange(control.getChange());
|
|
||||||
if (edit.isPresent()) {
|
if (edit.isPresent()) {
|
||||||
revision = ObjectId.toString(edit.get().getEditCommit());
|
revision = ObjectId.toString(edit.get().getEditCommit());
|
||||||
} else {
|
} else {
|
||||||
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
|
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (AuthException e) {
|
|
||||||
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
PatchSet patchSet = psUtil.get(db, control.getNotes(), patchKey.getParentKey());
|
PatchSet patchSet = psUtil.get(requestDb.get(), notes, patchKey.getParentKey());
|
||||||
if (patchSet == null) {
|
if (patchSet == null) {
|
||||||
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
|
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
revision = patchSet.getRevision().get();
|
revision = patchSet.getRevision().get();
|
||||||
}
|
}
|
||||||
} catch (NoSuchChangeException e) {
|
} catch (NoSuchChangeException | AuthException e) {
|
||||||
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
|
rsp.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||||
return;
|
return;
|
||||||
} catch (OrmException e) {
|
} catch (OrmException | PermissionBackendException e) {
|
||||||
getServletContext().log("Cannot query database", e);
|
getServletContext().log("Cannot query database", e);
|
||||||
rsp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
rsp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -95,20 +95,6 @@ public class ChangeControl {
|
|||||||
throw new NoSuchChangeException(notes.getChangeId(), e);
|
throw new NoSuchChangeException(notes.getChangeId(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeControl validateFor(ReviewDb db, Change.Id changeId, CurrentUser user)
|
|
||||||
throws OrmException {
|
|
||||||
return validateFor(db, notesFactory.createChecked(changeId), user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChangeControl validateFor(ReviewDb db, ChangeNotes notes, CurrentUser user)
|
|
||||||
throws OrmException {
|
|
||||||
ChangeControl c = controlFor(notes, user);
|
|
||||||
if (!c.isVisible(db)) {
|
|
||||||
throw new NoSuchChangeException(c.getId());
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
|
|||||||
Reference in New Issue
Block a user