USACE / USACE/cwms-data-api

[Bug]: User privileges on CDA post -- store water supply contract

Open
#1,853 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug priority:medium
Dominant language
Java
Stars
28
Forks
25
Avg merge
4d 22h
Merged PRs (30d)
20

Description

Describe the bug

Executing this command:

curl -X 'POST' \
  'https://water.dev.cwbi.us/cwms-data/projects/SWT/HUDS/water-user/GRDA/contracts?fail-if-exists=true&ignore-nulls=true&_cb=1785271359358' \
  -H 'accept: */*' \
  -H 'X-CWMS-LRTS-Formatting: false' \
  -H 'Content-Type: application/json;version=1' \
  -H 'Cache-Control: no-cache, no-store, max-age=0' \
  -H 'Pragma: no-cache' \
  -d '{"office-id":"CWMS","water-user":{"entity-name":"GRDA","project-id":{"office-id":"SWT","name":"HUDS"},"water-right":"State of Oklahoma"},"contract-id":{"office-id":"CWMS","name":"Salina Pumpback GeneratorsPumps"},"contract-type":{"office-id":"CWMS","display-value":"Conduit","tooltip":"Conduit contract","active":true},"contract-effective-date":-189367200000,"contract-expiration-date":2966392800000,"contracted-storage":6.919833108641587E7,"initial-use-allocation":6.919833108641587E7,"future-use-allocation":0.0,"storage-units-id":"m3","future-use-percent-activated":0.0,"total-alloc-percent-activated":56100.0,"pump-out-location":{"pump-location":{"office-id":"SWT","name":"HUDS-SalinaPumps","latitude":36.23009444444445,"longitude":-95.18218611111112,"active":true,"public-name":"Salina Pumpback Pumps","timezone-name":"US/Central","location-kind":"PUMP","nation":"US","state-initial":"OK","county-name":"Mayes","nearest-city":"Tahlequah","horizontal-datum":"NAD83","published-longitude":95.19333333333334,"published-latitude":36.23166666666667,"vertical-datum":"NAVD88","elevation":188.67119999999997,"bounding-office-id":"SWT","elevation-units":"m"},"pump-type":"OUT"},"pump-in-location":{"pump-location":{"office-id":"SWT","name":"HUDS-SalinaGenerators","latitude":36.23009444444445,"longitude":-95.18218611111112,"active":true,"public-name":"Salina Pumpback Generators","timezone-name":"US/Central","location-kind":"PUMP","nation":"US","state-initial":"OK","county-name":"Mayes","nearest-city":"Tahlequah","horizontal-datum":"NAD83","published-longitude":95.19333333333334,"published-latitude":36.23166666666667,"vertical-datum":"NAVD88","elevation":188.67119999999997,"bounding-office-id":"SWT","elevation-units":"m"},"pump-type":"IN"}}'

Resulted in a 404 result status with this Response Body:

{
  "message": "ORA-20048: NO_WRITE_PRIVILEGE: User doesnt have write privileges",
  "incidentIdentifier": "3c5db42c-82a6-43cf-9a97-93f2184fbd4f",
  "source": "Database",
  "details": {
    "stackTraceLines": [
      "cwms.cda.api.errors.NotFoundException: ORA-20048: NO_WRITE_PRIVILEGE: User doesnt have write privileges",
      "\tat cwms.cda.data.dao.JooqDao.buildNotFound(JooqDao.java:552)",
      "\tat cwms.cda.data.dao.JooqDao.wrapException(JooqDao.java:349)",
      "\tat cwms.cda.data.dao.JooqDao.connection(JooqDao.java:886)",
      "\tat cwms.cda.data.dao.watersupply.WaterContractDao.storeWaterContract(WaterContractDao.java:120)",
      "\tat cwms.cda.api.watersupply.WaterContractCreateController.handle(WaterContractCreateController.java:109)",
      "\tat cwms.cda.security.CdaAccessManager.manage(CdaAccessManager.java:44)",
      "\tat io.javalin.http.JavalinServlet.addHandler$lambda-0(JavalinServlet.kt:96)",
      "\tat io.javalin.http.JavalinServlet$lifecycle$2$1$1.invoke(JavalinServlet.kt:43)",
      "\tat io.javalin.http.JavalinServlet$lifecycle$2$1$1.invoke(JavalinServlet.kt:43)",
      "\tat io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:99)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)",
      "\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85)",
      "\tat io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:680)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:658)",
      "\tat java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2100)",
      "\tat io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)",
      "\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85)",
      "\tat io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:680)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:658)",
      "\tat java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2100)",
      "\tat io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)",
      "\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85)",
      "\tat io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:680)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:658)",
      "\tat java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2100)",
      "\tat io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85)",
      "\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)",
      "\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)",
      "\tat io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85)",
      "\tat io.javalin.http.JavalinServlet.service(JavalinServlet.kt:89)",
      "\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:623)",
      "\tat cwms.cda.ApiServlet.service(ApiServlet.java:1049)",
      "\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:623)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:197)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)",
      "\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)",
      "\tat cwms.cda.servlet.W3CTraceFilter.doFilter(W3CTraceFilter.java:54)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)",
      "\tat org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:334)",
      "\tat org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:161)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)",
      "\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)",
      "\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)",
      "\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:88)",
      "\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)",
      "\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)",
      "\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83)",
      "\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72)",
      "\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)",
      "\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398)",
      "\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)",
      "\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1309)",
      "\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1854)",
      "\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)",
      "\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:973)",
      "\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:491)",
      "\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)",
      "\tat java.base/java.lang.Thread.run(Thread.java:829)",
      "Caused by: java.sql.SQLException: ORA-20048: NO_WRITE_PRIVILEGE: User doesnt have write privileges",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 3396",
      "ORA-06512: at \"CWMS_20.CWMS_ERR\", line 80",
      "ORA-06512: at \"CWMS_20.ST_PHYSICAL_LOCATION\", line 9",
      "ORA-04088: error during execution of trigger 'CWMS_20.ST_PHYSICAL_LOCATION'",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 805",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 2126",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 3354",
      "ORA-20025: LOCATION_ID_NOT_FOUND: The Location: \"HUDS-SalinaPumps\" does not exist.",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 1445",
      "ORA-06512: at \"CWMS_20.CWMS_ERR\", line 80",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 245",
      "ORA-01403: no data found",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 213",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 182",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 274",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 1046",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 3324",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 5592",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 5557",
      "ORA-06512: at \"CWMS_20.CWMS_WATER_SUPPLY\", line 503",
      "ORA-06512: at \"CWMS_20.CWMS_WATER_SUPPLY\", line 620",
      "ORA-01403: no data found",
      "ORA-06512: at \"CWMS_20.CWMS_WATER_SUPPLY\", line 592",
      "ORA-06512: at line 1",
      "",
      https://docs.oracle.com/error-help/db/ora-20048/,
      "\tat oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:718)",
      "\tat oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:618)",
      "\tat oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1372)",
      "\tat oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:975)",
      "\tat oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:237)",
      "\tat oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:524)",
      "\tat oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:255)",
      "\tat oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1467)",
      "\tat oracle.jdbc.driver.OracleStatement.executeSQLStatement(OracleStatement.java:2021)",
      "\tat oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1634)",
      "\tat oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3973)",
      "\tat oracle.jdbc.driver.OraclePreparedStatement.doExecute(OraclePreparedStatement.java:4447)",
      "\tat oracle.jdbc.driver.OracleCallableStatement.doExecute(OracleCallableStatement.java:4245)",
      "\tat oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4234)",
      "\tat oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1032)",
      "\tat jdk.internal.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)",
      "\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
      "\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)",
      "\tat org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport$StatementProxy.invoke(AbstractQueryReport.java:214)",
      "\tat com.sun.proxy.$Proxy38.execute(Unknown Source)",
      "\tat jdk.internal.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)",
      "\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
      "\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)",
      "\tat org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport$StatementProxy.invoke(AbstractQueryReport.java:214)",
      "\tat com.sun.proxy.$Proxy38.execute(Unknown Source)",
      "\tat jdk.internal.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)",
      "\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
      "\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)",
      "\tat org.apache.tomcat.jdbc.pool.interceptor.StatementDecoratorInterceptor$StatementProxy.invoke(StatementDecoratorInterceptor.java:237)",
      "\tat com.sun.proxy.$Proxy38.execute(Unknown Source)",
      "\tat jdk.internal.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)",
      "\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
      "\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)",
      "\tat org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:123)",
      "\tat com.sun.proxy.$Proxy38.execute(Unknown Source)",
      "\tat org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:219)",
      "\tat org.jooq.impl.Tools.executeStatementAndGetFirstResultSet(Tools.java:4695)",
      "\tat org.jooq.impl.AbstractRoutine.execute0(AbstractRoutine.java:622)",
      "\tat org.jooq.impl.AbstractRoutine.executeCallableStatement(AbstractRoutine.java:582)",
      "\tat org.jooq.impl.AbstractRoutine.execute(AbstractRoutine.java:405)",
      "\tat org.jooq.impl.Tools.attach(Tools.java:1610)",
      "\tat org.jooq.impl.AbstractRoutine.execute(AbstractRoutine.java:374)",
      "\tat usace.cwms.db.jooq.codegen.packages.CWMS_WATER_SUPPLY_PACKAGE.call_STORE_CONTRACTS2(CWMS_WATER_SUPPLY_PACKAGE.java:386)",
      "\tat cwms.cda.data.dao.watersupply.WaterContractDao.lambda$storeWaterContract$9(WaterContractDao.java:125)",
      "\tat org.jooq.impl.DefaultDSLContext.lambda$connection$12(DefaultDSLContext.java:697)",
      "\tat org.jooq.impl.DefaultDSLContext.connectionResult(DefaultDSLContext.java:658)",
      "\tat org.jooq.impl.DefaultDSLContext.connection(DefaultDSLContext.java:696)",
      "\tat cwms.cda.data.dao.JooqDao.connection(JooqDao.java:884)",
      "\t... 70 more",
      "Caused by: Error : 20048, Position : 0, SQL = BEGIN \"CWMS_20\".\"CWMS_WATER_SUPPLY\".\"STORE_CONTRACTS2\" (:1, :2, :3) ; END;, Original SQL = { call \"CWMS_20\".\"CWMS_WATER_SUPPLY\".\"STORE_CONTRACTS2\" (?, ?, ?) }, Error Message = ORA-20048: NO_WRITE_PRIVILEGE: User doesnt have write privileges",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 3396",
      "ORA-06512: at \"CWMS_20.CWMS_ERR\", line 80",
      "ORA-06512: at \"CWMS_20.ST_PHYSICAL_LOCATION\", line 9",
      "ORA-04088: error during execution of trigger 'CWMS_20.ST_PHYSICAL_LOCATION'",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 805",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 2126",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 3354",
      "ORA-20025: LOCATION_ID_NOT_FOUND: The Location: \"HUDS-SalinaPumps\" does not exist.",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 1445",
      "ORA-06512: at \"CWMS_20.CWMS_ERR\", line 80",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 245",
      "ORA-01403: no data found",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 213",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 182",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 274",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 1046",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 3324",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 5592",
      "ORA-06512: at \"CWMS_20.CWMS_LOC\", line 5557",
      "ORA-06512: at \"CWMS_20.CWMS_WATER_SUPPLY\", line 503",
      "ORA-06512: at \"CWMS_20.CWMS_WATER_SUPPLY\", line 620",
      "ORA-01403: no data found",
      "ORA-06512: at \"CWMS_20.CWMS_WATER_SUPPLY\", line 592",
      "ORA-06512: at line 1",
      "",
      "\tat oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:726)",
      "\t... 117 more"
    ]
  }
}
Expected behavior

Expected a 201 response code for successful write of record.

To Reproduce

Executing this command:

curl -X 'POST' \
  'https://water.dev.cwbi.us/cwms-data/projects/SWT/HUDS/water-user/GRDA/contracts?fail-if-exists=true&ignore-nulls=true&_cb=1785271359358' \
  -H 'accept: */*' \
  -H 'X-CWMS-LRTS-Formatting: false' \
  -H 'Content-Type: application/json;version=1' \
  -H 'Cache-Control: no-cache, no-store, max-age=0' \
  -H 'Pragma: no-cache' \
  -d '{"office-id":"CWMS","water-user":{"entity-name":"GRDA","project-id":{"office-id":"SWT","name":"HUDS"},"water-right":"State of Oklahoma"},"contract-id":{"office-id":"CWMS","name":"Salina Pumpback GeneratorsPumps"},"contract-type":{"office-id":"CWMS","display-value":"Conduit","tooltip":"Conduit contract","active":true},"contract-effective-date":-189367200000,"contract-expiration-date":2966392800000,"contracted-storage":6.919833108641587E7,"initial-use-allocation":6.919833108641587E7,"future-use-allocation":0.0,"storage-units-id":"m3","future-use-percent-activated":0.0,"total-alloc-percent-activated":56100.0,"pump-out-location":{"pump-location":{"office-id":"SWT","name":"HUDS-SalinaPumps","latitude":36.23009444444445,"longitude":-95.18218611111112,"active":true,"public-name":"Salina Pumpback Pumps","timezone-name":"US/Central","location-kind":"PUMP","nation":"US","state-initial":"OK","county-name":"Mayes","nearest-city":"Tahlequah","horizontal-datum":"NAD83","published-longitude":95.19333333333334,"published-latitude":36.23166666666667,"vertical-datum":"NAVD88","elevation":188.67119999999997,"bounding-office-id":"SWT","elevation-units":"m"},"pump-type":"OUT"},"pump-in-location":{"pump-location":{"office-id":"SWT","name":"HUDS-SalinaGenerators","latitude":36.23009444444445,"longitude":-95.18218611111112,"active":true,"public-name":"Salina Pumpback Generators","timezone-name":"US/Central","location-kind":"PUMP","nation":"US","state-initial":"OK","county-name":"Mayes","nearest-city":"Tahlequah","horizontal-datum":"NAD83","published-longitude":95.19333333333334,"published-latitude":36.23166666666667,"vertical-datum":"NAVD88","elevation":188.67119999999997,"bounding-office-id":"SWT","elevation-units":"m"},"pump-type":"IN"}}'

Priority

Medium

Logs/Incident Identifier

No response

CURL Commands

CDA Version

2026.07.28-develop

Additional context

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with WaterContractDao.java:120, WaterContractCreateController.java:109, and CdaAccessManager.java:44, then compare the reported POST response with the Oracle stack trace. Trace how the missing HUDS-SalinaPumps location becomes a 404 with NO_WRITE_PRIVILEGE; done means the water-contract request reports the correct failure or succeeds when its prerequisites and privileges are valid.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, sql
Domain
api, backend, databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.