Search in sources :

Example 21 with Repo

use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.

the class CodeRouteService method getCode.

public Map<String, Object> getCode(Request request, Response response) {
    Map<String, Object> map = new HashMap<>();
    Repo repo = Singleton.getRepo();
    Data data = Singleton.getData();
    SearchcodeLib scl = Singleton.getSearchcodeLib(data);
    OWASPClassifier owaspClassifier = new OWASPClassifier();
    Cocomo2 coco = new Cocomo2();
    String codeId = request.params(":codeid");
    CodeResult codeResult = this.codeSearcher.getByCodeId(codeId);
    if (codeResult == null) {
        response.redirect("/404/");
        halt();
    }
    List<String> codeLines = codeResult.code;
    StringBuilder code = new StringBuilder();
    StringBuilder lineNos = new StringBuilder();
    String padStr = "";
    for (int total = codeLines.size() / 10; total > 0; total = total / 10) {
        padStr += " ";
    }
    for (int i = 1, d = 10, len = codeLines.size(); i <= len; i++) {
        if (i / d > 0) {
            d *= 10;
            // Del last char
            padStr = padStr.substring(0, padStr.length() - 1);
        }
        code.append("<span id=\"").append(i).append("\"></span>").append(StringEscapeUtils.escapeHtml4(codeLines.get(i - 1))).append("\n");
        lineNos.append(padStr).append("<a href=\"#").append(i).append("\">").append(i).append("</a>").append("\n");
    }
    List<OWASPMatchingResult> owaspResults = new ArrayList<OWASPMatchingResult>();
    if (CommonRouteService.owaspAdvisoriesEnabled()) {
        if (!codeResult.languageName.equals("Text") && !codeResult.languageName.equals("Unknown")) {
            owaspResults = owaspClassifier.classifyCode(codeLines, codeResult.languageName);
        }
    }
    int limit = Integer.parseInt(Properties.getProperties().getProperty(Values.HIGHLIGHT_LINE_LIMIT, Values.DEFAULT_HIGHLIGHT_LINE_LIMIT));
    boolean highlight = Singleton.getHelpers().tryParseInt(codeResult.codeLines, "0") <= limit;
    RepoResult repoResult = repo.getRepoByName(codeResult.repoName);
    if (repoResult != null) {
        map.put("source", repoResult.getSource());
    }
    map.put("fileName", codeResult.fileName);
    // TODO fix this properly code path includes the repo name and should be removed
    String codePath = codeResult.codePath;
    if (codeResult.codePath.contains("/")) {
        codePath = codeResult.codePath.substring(codeResult.codePath.indexOf('/'), codeResult.codePath.length());
    }
    if (!codePath.startsWith("/")) {
        codePath = "/" + codePath;
    }
    map.put("codePath", codePath);
    map.put("codeLength", codeResult.codeLines);
    map.put("linenos", lineNos.toString());
    map.put("languageName", codeResult.languageName);
    map.put("md5Hash", codeResult.md5hash);
    map.put("repoName", codeResult.repoName);
    map.put("highlight", highlight);
    map.put("repoLocation", codeResult.getRepoLocation());
    map.put("codeValue", code.toString());
    map.put("highligher", CommonRouteService.getSyntaxHighlighter());
    map.put("codeOwner", codeResult.getCodeOwner());
    map.put("owaspResults", owaspResults);
    double estimatedEffort = coco.estimateEffort(scl.countFilteredLines(codeResult.getCode()));
    int estimatedCost = (int) coco.estimateCost(estimatedEffort, CommonRouteService.getAverageSalary());
    if (estimatedCost != 0 && !scl.languageCostIgnore(codeResult.getLanguageName())) {
        map.put("estimatedCost", estimatedCost);
    }
    map.put("logoImage", CommonRouteService.getLogo());
    map.put("isCommunity", App.ISCOMMUNITY);
    map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
    return map;
}
Also used : Data(com.searchcode.app.dao.Data) Repo(com.searchcode.app.dao.Repo) RepoResult(com.searchcode.app.model.RepoResult)

Example 22 with Repo

use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.

the class CodeRouteService method getRepositoryList.

public Map<String, Object> getRepositoryList(Request request, Response response) {
    Map<String, Object> map = new HashMap<>();
    Repo repo = Singleton.getRepo();
    String offSet = request.queryParams("offset");
    int pageSize = 20;
    int indexOffset = Singleton.getHelpers().tryParseInt(offSet, "0");
    List<RepoResult> pagedRepo = repo.getPagedRepo(pageSize * indexOffset, pageSize + 1);
    boolean hasNext = pagedRepo.size() == (pageSize + 1);
    boolean hasPrevious = indexOffset != 0;
    if (hasNext) {
        pagedRepo = pagedRepo.subList(0, pageSize);
    }
    map.put("hasPrevious", hasPrevious);
    map.put("hasNext", hasNext);
    map.put("repoList", pagedRepo);
    map.put("nextOffset", indexOffset + 1);
    map.put("previousOffset", indexOffset - 1);
    map.put("logoImage", CommonRouteService.getLogo());
    map.put("isCommunity", App.ISCOMMUNITY);
    map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
    return map;
}
Also used : Repo(com.searchcode.app.dao.Repo) RepoResult(com.searchcode.app.model.RepoResult)

Example 23 with Repo

use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.

the class CodeRouteService method html.

public ModelAndView html(Request request, Response response) {
    Repo repo = Singleton.getRepo();
    Data data = Singleton.getData();
    SearchcodeLib scl = Singleton.getSearchcodeLib(data);
    CodeSearcher cs = new CodeSearcher();
    CodeMatcher cm = new CodeMatcher(data);
    Map<String, Object> map = new HashMap<>();
    map.put("repoCount", repo.getRepoCount());
    if (request.queryParams().contains("q")) {
        String query = request.queryParams("q").trim();
        String altquery = query.replaceAll("[^A-Za-z0-9 ]", " ").trim().replaceAll(" +", " ");
        int page = 0;
        if (request.queryParams().contains("p")) {
            try {
                page = Integer.parseInt(request.queryParams("p"));
                page = page > 19 ? 19 : page;
            } catch (NumberFormatException ex) {
                page = 0;
            }
        }
        String[] repos = new String[0];
        String[] langs = new String[0];
        String[] owners = new String[0];
        String reposFilter = Values.EMPTYSTRING;
        String langsFilter = Values.EMPTYSTRING;
        String ownersFilter = Values.EMPTYSTRING;
        String reposQueryString = Values.EMPTYSTRING;
        String langsQueryString = Values.EMPTYSTRING;
        String ownsQueryString = Values.EMPTYSTRING;
        if (request.queryParams().contains("repo")) {
            repos = request.queryParamsValues("repo");
            if (repos.length != 0) {
                List<String> reposList = Arrays.asList(repos).stream().map((s) -> "reponame:" + QueryParser.escape(s)).collect(Collectors.toList());
                reposFilter = " && (" + StringUtils.join(reposList, " || ") + ")";
                List<String> reposQueryList = Arrays.asList(repos).stream().map((s) -> "&repo=" + URLEncoder.encode(s)).collect(Collectors.toList());
                reposQueryString = StringUtils.join(reposQueryList, "");
            }
        }
        if (request.queryParams().contains("lan")) {
            langs = request.queryParamsValues("lan");
            if (langs.length != 0) {
                List<String> langsList = Arrays.asList(langs).stream().map((s) -> "languagename:" + QueryParser.escape(s)).collect(Collectors.toList());
                langsFilter = " && (" + StringUtils.join(langsList, " || ") + ")";
                List<String> langsQueryList = Arrays.asList(langs).stream().map((s) -> "&lan=" + URLEncoder.encode(s)).collect(Collectors.toList());
                langsQueryString = StringUtils.join(langsQueryList, "");
            }
        }
        if (request.queryParams().contains("own")) {
            owners = request.queryParamsValues("own");
            if (owners.length != 0) {
                List<String> ownersList = Arrays.asList(owners).stream().map((s) -> "codeowner:" + QueryParser.escape(s)).collect(Collectors.toList());
                ownersFilter = " && (" + StringUtils.join(ownersList, " || ") + ")";
                List<String> ownsQueryList = Arrays.asList(owners).stream().map((s) -> "&own=" + URLEncoder.encode(s)).collect(Collectors.toList());
                ownsQueryString = StringUtils.join(ownsQueryList, "");
            }
        }
        // split the query escape it and and it together
        String cleanQueryString = scl.formatQueryString(query);
        SearchResult searchResult = cs.search(cleanQueryString + reposFilter + langsFilter + ownersFilter, page);
        searchResult.setCodeResultList(cm.formatResults(searchResult.getCodeResultList(), query, true));
        for (CodeFacetRepo f : searchResult.getRepoFacetResults()) {
            if (Arrays.asList(repos).contains(f.getRepoName())) {
                f.setSelected(true);
            }
        }
        for (CodeFacetLanguage f : searchResult.getLanguageFacetResults()) {
            if (Arrays.asList(langs).contains(f.getLanguageName())) {
                f.setSelected(true);
            }
        }
        for (CodeFacetOwner f : searchResult.getOwnerFacetResults()) {
            if (Arrays.asList(owners).contains(f.getOwner())) {
                f.setSelected(true);
            }
        }
        map.put("searchValue", query);
        map.put("searchResult", searchResult);
        map.put("reposQueryString", reposQueryString);
        map.put("langsQueryString", langsQueryString);
        map.put("ownsQueryString", ownsQueryString);
        map.put("altQuery", altquery);
        map.put("totalPages", searchResult.getPages().size());
        map.put("isHtml", true);
        map.put("logoImage", CommonRouteService.getLogo());
        map.put("isCommunity", App.ISCOMMUNITY);
        map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
        return new ModelAndView(map, "searchresults.ftl");
    }
    map.put("photoId", CommonRouteService.getPhotoId());
    map.put("numDocs", cs.getTotalNumberDocumentsIndexed());
    map.put("logoImage", CommonRouteService.getLogo());
    map.put("isCommunity", App.ISCOMMUNITY);
    map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
    return new ModelAndView(map, "index.ftl");
}
Also used : java.util(java.util) Singleton(com.searchcode.app.service.Singleton) Spark.halt(spark.Spark.halt) RepoResult(com.searchcode.app.model.RepoResult) ModelAndView(spark.ModelAndView) Repo(com.searchcode.app.dao.Repo) Collectors(java.util.stream.Collectors) StringUtils(org.apache.commons.lang3.StringUtils) Values(com.searchcode.app.config.Values) CodeMatcher(com.searchcode.app.service.CodeMatcher) com.searchcode.app.util(com.searchcode.app.util) CommonRouteService(com.searchcode.app.service.route.CommonRouteService) URLEncoder(java.net.URLEncoder) com.searchcode.app.dto(com.searchcode.app.dto) CodeSearcher(com.searchcode.app.service.CodeSearcher) QueryParser(org.apache.lucene.queryparser.classic.QueryParser) Gson(com.google.gson.Gson) Request(spark.Request) Data(com.searchcode.app.dao.Data) Response(spark.Response) Properties(com.searchcode.app.util.Properties) StringEscapeUtils(org.apache.commons.lang3.StringEscapeUtils) App(com.searchcode.app.App) ModelAndView(spark.ModelAndView) Data(com.searchcode.app.dao.Data) CodeSearcher(com.searchcode.app.service.CodeSearcher) Repo(com.searchcode.app.dao.Repo) CodeMatcher(com.searchcode.app.service.CodeMatcher)

Example 24 with Repo

use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.

the class CodeRouteService method literalSearch.

// This is very alpha and just for testing
// TODO improve or remove this
public Map<String, Object> literalSearch(Request request, Response response) {
    Repo repo = Singleton.getRepo();
    Data data = Singleton.getData();
    CodeSearcher cs = new CodeSearcher();
    CodeMatcher cm = new CodeMatcher(data);
    Map<String, Object> map = new HashMap<>();
    map.put("repoCount", repo.getRepoCount());
    if (request.queryParams().contains("q")) {
        String query = request.queryParams("q").trim();
        int page = 0;
        if (request.queryParams().contains("p")) {
            try {
                page = Integer.parseInt(request.queryParams("p"));
                page = page > 19 ? 19 : page;
            } catch (NumberFormatException ex) {
                page = 0;
            }
        }
        String altquery = query.replaceAll("[^A-Za-z0-9 ]", " ").trim().replaceAll(" +", " ");
        SearchResult searchResult = cs.search(query, page);
        searchResult.setCodeResultList(cm.formatResults(searchResult.getCodeResultList(), altquery, false));
        map.put("searchValue", query);
        map.put("searchResult", searchResult);
        map.put("reposQueryString", "");
        map.put("langsQueryString", "");
        map.put("altQuery", "");
        map.put("logoImage", CommonRouteService.getLogo());
        map.put("isCommunity", App.ISCOMMUNITY);
        return map;
    }
    map.put("photoId", 1);
    map.put("numDocs", cs.getTotalNumberDocumentsIndexed());
    map.put("logoImage", CommonRouteService.getLogo());
    map.put("isCommunity", App.ISCOMMUNITY);
    map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
    return map;
}
Also used : Repo(com.searchcode.app.dao.Repo) CodeMatcher(com.searchcode.app.service.CodeMatcher) Data(com.searchcode.app.dao.Data) CodeSearcher(com.searchcode.app.service.CodeSearcher)

Example 25 with Repo

use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.

the class AdminRouteService method postBulk.

public List<ValidatorResult> postBulk(Request request, Response response) {
    String repos = request.queryParams("repos");
    String[] repolines = repos.split("\\r?\\n");
    Repo repo = Singleton.getRepo();
    List<ValidatorResult> validatorResults = new ArrayList<>();
    for (String line : repolines) {
        String[] repoparams = line.split(",", -1);
        if (repoparams.length == 7) {
            String branch = repoparams[6].trim();
            if (branch.equals(Values.EMPTYSTRING)) {
                branch = "master";
            }
            String scm = repoparams[1].trim().toLowerCase();
            if (scm.equals(Values.EMPTYSTRING)) {
                scm = "git";
            }
            RepoResult repoResult = new RepoResult(-1, repoparams[0], scm, repoparams[2], repoparams[3], repoparams[4], repoparams[5], branch, "{}");
            ValidatorResult validate = this.validatorService.validate(repoResult);
            if (validate.isValid) {
                repo.saveRepo(repoResult);
                this.jobService.forceEnqueue(repoResult);
            } else {
                validate.setLine(line);
                validatorResults.add(validate);
            }
        } else {
            ValidatorResult validate = new ValidatorResult(false, "Incorrect number of elements: " + line);
            validate.setLine(line);
            validatorResults.add(validate);
        }
    }
    return validatorResults;
}
Also used : Repo(com.searchcode.app.dao.Repo) ValidatorResult(com.searchcode.app.model.ValidatorResult) RepoResult(com.searchcode.app.model.RepoResult)

Aggregations

Repo (com.searchcode.app.dao.Repo)36 Request (spark.Request)28 ApiRouteService (com.searchcode.app.service.route.ApiRouteService)24 RepoResultApiResponse (com.searchcode.app.dto.api.RepoResultApiResponse)22 ApiResponse (com.searchcode.app.dto.api.ApiResponse)20 RepoResult (com.searchcode.app.model.RepoResult)14 ValidatorResult (com.searchcode.app.model.ValidatorResult)5 Data (com.searchcode.app.dao.Data)4 CodeSearcher (com.searchcode.app.service.CodeSearcher)3 AdminRouteService (com.searchcode.app.service.route.AdminRouteService)3 UniqueRepoQueue (com.searchcode.app.util.UniqueRepoQueue)3 Gson (com.google.gson.Gson)2 CodeMatcher (com.searchcode.app.service.CodeMatcher)2 Helpers (com.searchcode.app.util.Helpers)2 ModelAndView (spark.ModelAndView)2 App (com.searchcode.app.App)1 SQLiteMemoryDatabaseConfig (com.searchcode.app.config.SQLiteMemoryDatabaseConfig)1 Values (com.searchcode.app.config.Values)1 Api (com.searchcode.app.dao.Api)1 com.searchcode.app.dto (com.searchcode.app.dto)1