Merge "Remove ChangeControl.GenericFactory#validateFor() and migrate callers"

This commit is contained in:
David Pursehouse
2017-08-23 23:31:17 +00:00
committed by Gerrit Code Review
2 changed files with 24 additions and 33 deletions

View File

@@ -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;

View File

@@ -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