DEV Community

iron_man
iron_man

Posted on

ApiController.java

package com.hardening;

import jakarta.servlet.http.HttpServletRequest;
import java.util.;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.csrf.CsrfToken;
import org.springframework.web.bind.annotation.
;
import static com.hardening.Models.*;

@RestController
@RequestMapping("/api")
public class ApiController {
private final Settings settings; private final TnsResolver tns; private final SchemaNameBuilder names;
private final DatabaseGateway db; private final RepairExecutionService repairs; private final ReferenceConfigurationService reference;
private final RunHistoryRepository history;private final ReferenceRepairService referenceRepairs;
public ApiController(Settings settings,TnsResolver tns,SchemaNameBuilder names,DatabaseGateway db,RepairExecutionService repairs,ReferenceConfigurationService reference,RunHistoryRepository history,ReferenceRepairService referenceRepairs) {
this.settings=settings;this.tns=tns;this.names=names;this.db=db;this.repairs=repairs;this.reference=reference;this.history=history;this.referenceRepairs=referenceRepairs;
}
private String owner(HttpServletRequest r,Authentication a) { return a!=null && a.isAuthenticated()?"user:"+a.getName():"session:"+r.getSession().getId(); }
@GetMapping("/csrf") public Map csrf(CsrfToken token) { return Map.of("token",token.getToken(),"header",token.getHeaderName()); }
@GetMapping("/config") public Map config(Authentication auth) {
return Map.of("mode",settings.mode(),"segments",settings.segments(),"referenceReady",reference.ready(),"writesEnabled",settings.demo()||settings.allowWrites(),
"admin",auth!=null && auth.getAuthorities().stream().anyMatch(a->a.getAuthority().equals("ROLE_ADMIN")),"authenticated",auth!=null);
}
@GetMapping("/tns") public Map tns(@RequestParam String input) { var parsed=SchemaInputParser.parse(input); return Map.of("base",parsed.base(),"aliases",tns.search(parsed.hint())); }
@PostMapping("/connection/test") public Map test(@RequestBody Target target) {
String schema=names.build(SchemaInputParser.parse(target.input()).base(),target.segment()); db.test(target); return Map.of("schema",schema,"status","SUCCESS");
}
@PostMapping("/runs") public RunView scan(@RequestBody Target target,HttpServletRequest req,Authentication a) { return repairs.scan(owner(req,a),target); }
@GetMapping("/runs/{id}") public RunView run(@PathVariable String id,HttpServletRequest req,Authentication a) { return repairs.get(owner(req,a),id); }
@GetMapping("/history") public List history(HttpServletRequest req,Authentication a) { return history.list(owner(req,a)); }
@PostMapping("/runs/{id}/execute") public RunView execute(@PathVariable String id,@RequestBody Approval approval,HttpServletRequest req,Authentication a) { return repairs.execute(owner(req,a),id,approval); }
@PostMapping("/runs/{id}/skip/{actionId}") public RunView skip(@PathVariable String id,@PathVariable String actionId,HttpServletRequest req,Authentication a) { return repairs.skip(owner(req,a),id,actionId); }
@PostMapping("/admin/reference") public Map configure(@RequestBody ReferenceConfig config) { reference.configure(config); return Map.of("status","CONFIGURED"); }
@DeleteMapping("/admin/reference") public void clear() { reference.clear(); }
@GetMapping("/runs/{id}/reference/{actionId}") public ReferenceRepairService.Preview preview(@PathVariable String id,@PathVariable String actionId,HttpServletRequest req,Authentication a) { return referenceRepairs.preview(owner(req,a),id,actionId); }
@PostMapping("/runs/{id}/reference-plan") public RunView referencePlan(@PathVariable String id,@RequestBody ReferenceRepairService.Review review,HttpServletRequest req,Authentication a) { return referenceRepairs.propose(owner(req,a),id,review); }
@GetMapping("/admin/candidates") public List candidates() { return referenceRepairs.verifiedCandidates(); }
@PostMapping("/admin/candidates/{id}/publish") public Map publish(@PathVariable String id,@RequestBody Map body) { return Map.of("file",referenceRepairs.publish(id,body.get("checksum"))); }
}

Top comments (0)