gbv / cocoda

A web-based tool for creating mappings between knowledge organization systems.
https://coli-conc.gbv.de/cocoda/
MIT License
39 stars 5 forks source link

Authentication Error when allowing anyone to create mappings #705

Closed sroertgen closed 1 year ago

sroertgen commented 1 year ago

Hello,

I get an error that prohibits me from allowing anyone to create mappings in cocoda. If I use the default setup in JSKOS-Server, i.e. just allowing reading, everything works as expected.

I have the following setup:

docker-compose.yml

version: "3"

services:
  cocoda:
    image: coliconc/cocoda
    volumes:
      # Mount ./config folder into container
      - ./cocoda/config:/config
    ports:
      # Use host port 8080
      - 8080:80
    restart: always
  jskos-server:
    image: coliconc/jskos-server
    # replace this with your UID/GID if necessary (id -u; id -g); remove on macOS/Windows
    user: 1000:1000
    depends_on:
      - mongo
    volumes:
      - ./jskos-server/data/config:/config
      - ./jskos-server/data/imports:/data/imports
    # environment:
    #   - NODE_ENV=production # note that this requires the server to be run behind a HTTPS proxy
    ports:
      - 3000:3000
    restart: unless-stopped

  mongo:
    image: mongo:4
    # replace this with your UID/GID if necessary (id -u; id -g); remove on macOS/Windows
    user: 1000:1000
    volumes:
      - ./jskos-server/data/db:/data/db
    restart: unless-stopped

jskos-server/data/config/config.json

{
  "mappings": {
    "read": {
      "auth": false
    },
    "create": {
      "auth": false
    },
    "update": {
      "auth": false,
      "crossUser": true
    },
    "delete": {
      "auth": false,
      "crossUser": true
    },
    "fromSchemeWhitelist": null,
    "toSchemeWhitelist": null,
    "cardinality": "1-to-n"
  },
  "mongo": {
    "host": "mongo"
  },
  "namespace": "2a6feef3-39f8-4366-95c4-6182739d2adb"
}

cocoda/config/cocoda.json

{ "overrideRegistries": true,
  "registries": [
    {
      "provider": "LocalMappings",
      "uri": "http://coli-conc.gbv.de/registry/local-mappings",
      "notation": [
        "L"
      ],
      "prefLabel": {
        "de": "Lokal",
        "en": "Local"
      },
      "definition": {
        "en": [
          "Mappings saved locally in the browser"
        ],
        "de": [
          "Mappings, die lokal im Browser gespeichert wurden"
        ]
      }
    },
    {
      "provider": "MappingsApi",
      "uri": "http://localhost:3000/mappings",
      "status": "http://localhost:3000/status",
      "notation": [
        "C"
      ],
      "prefLabel": {
        "de": "Mapping-Register WLO",
        "en": "Mapping Registry WLO"
      },
      "definition": {
        "en": [
          "Central concordance registry of WirLernenOnline."
        ],
        "de": [
          "Zentrales Konkordanz-Register von WirLernenOnline"
        ]
      }
    },
    {
      "provider": "ConceptApi",
      "uri": "http://localhost:3000",
      "status": "http://localhost:3000/status",
      "notation": [
        "WLO"
      ],
      "prefLabel": {
        "en": "WLO JSKOS"
      },
      "definition": {
        "en": [
          "WirLernenOnline JSKOS server instance"
        ],
        "de": [
          "WirLernenOnline JSKOS-Server Instanz"
        ]
      }
    }
  ]
}

This is the error I get in as console output when visiting cocoda:

TypeError: n is undefined
    isAuthorizedFor http://localhost:8080/assets/main.c8621d56.js:35
    jY http://localhost:8080/assets/main.c8621d56.js:34
    _render http://localhost:8080/assets/main.c8621d56.js:5
    n http://localhost:8080/assets/main.c8621d56.js:5
    get http://localhost:8080/assets/main.c8621d56.js:5
    t http://localhost:8080/assets/main.c8621d56.js:5
    kG http://localhost:8080/assets/main.c8621d56.js:5
    $mount http://localhost:8080/assets/main.c8621d56.js:5
    init http://localhost:8080/assets/main.c8621d56.js:5
    d http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    eq http://localhost:8080/assets/main.c8621d56.js:5
    _update http://localhost:8080/assets/main.c8621d56.js:5
    n http://localhost:8080/assets/main.c8621d56.js:5
    get http://localhost:8080/assets/main.c8621d56.js:5
    t http://localhost:8080/assets/main.c8621d56.js:5
    kG http://localhost:8080/assets/main.c8621d56.js:5
    $mount http://localhost:8080/assets/main.c8621d56.js:5
    init http://localhost:8080/assets/main.c8621d56.js:5
    d http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    b http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    eq http://localhost:8080/assets/main.c8621d56.js:5
    _update http://localhost:8080/assets/main.c8621d56.js:5
    n http://localhost:8080/assets/main.c8621d56.js:5
    get http://localhost:8080/assets/main.c8621d56.js:5
    t http://localhost:8080/assets/main.c8621d56.js:5
    kG http://localhost:8080/assets/main.c8621d56.js:5
    $mount http://localhost:8080/assets/main.c8621d56.js:5
    init http://localhost:8080/assets/main.c8621d56.js:5
    d http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    Q http://localhost:8080/assets/main.c8621d56.js:5
    F http://localhost:8080/assets/main.c8621d56.js:5
    Q http://localhost:8080/assets/main.c8621d56.js:5
    F http://localhost:8080/assets/main.c8621d56.js:5
    Q http://localhost:8080/assets/main.c8621d56.js:5
    F http://localhost:8080/assets/main.c8621d56.js:5
    eq http://localhost:8080/assets/main.c8621d56.js:5
    _update http://localhost:8080/assets/main.c8621d56.js:5
    n http://localhost:8080/assets/main.c8621d56.js:5
    get http://localhost:8080/assets/main.c8621d56.js:5
    run http://localhost:8080/assets/main.c8621d56.js:5
    IG http://localhost:8080/assets/main.c8621d56.js:5
    qd http://localhost:8080/assets/main.c8621d56.js:5
    gh http://localhost:8080/assets/main.c8621d56.js:5
    promise callback*zf http://localhost:8080/assets/main.c8621d56.js:5
    qd http://localhost:8080/assets/main.c8621d56.js:5
    Pw http://localhost:8080/assets/main.c8621d56.js:5
    update http://localhost:8080/assets/main.c8621d56.js:5
    notify http://localhost:8080/assets/main.c8621d56.js:5
    set http://localhost:8080/assets/main.c8621d56.js:5
    set http://localhost:8080/assets/main.c8621d56.js:5
    _navigatorRefresh http://localhost:8080/assets/main.c8621d56.js:66
    Ke http://localhost:8080/assets/main.c8621d56.js:14
    kt http://localhost:8080/assets/main.c8621d56.js:14
    Tt http://localhost:8080/assets/main.c8621d56.js:14
    setTimeout handler*Z/mf< http://localhost:8080/assets/main.c8621d56.js:14
    it http://localhost:8080/assets/main.c8621d56.js:14
    _i http://localhost:8080/assets/main.c8621d56.js:14
    tab http://localhost:8080/assets/main.c8621d56.js:66
    Ls http://localhost:8080/assets/main.c8621d56.js:5
    run http://localhost:8080/assets/main.c8621d56.js:5
    IG http://localhost:8080/assets/main.c8621d56.js:5
    qd http://localhost:8080/assets/main.c8621d56.js:5
    gh http://localhost:8080/assets/main.c8621d56.js:5
    promise callback*zf http://localhost:8080/assets/main.c8621d56.js:5
    qd http://localhost:8080/assets/main.c8621d56.js:5
    Pw http://localhost:8080/assets/main.c8621d56.js:5
    update http://localhost:8080/assets/main.c8621d56.js:5
    notify http://localhost:8080/assets/main.c8621d56.js:5
    es http://localhost:8080/assets/main.c8621d56.js:5
    jr http://localhost:8080/assets/main.c8621d56.js:52
    nx http://localhost:8080/assets/main.c8621d56.js:52
    setSelected http://localhost:8080/assets/main.c8621d56.js:887
    i http://localhost:8080/assets/main.ab148c8b.js:9
    loadFromParameters http://localhost:8080/assets/main.ab148c8b.js:9
    GT http://localhost:8080/assets/main.c8621d56.js:14
    load http://localhost:8080/assets/main.ab148c8b.js:9
    created http://localhost:8080/assets/main.ab148c8b.js:9
    Ls http://localhost:8080/assets/main.c8621d56.js:5
    ba http://localhost:8080/assets/main.c8621d56.js:5
    _init http://localhost:8080/assets/main.c8621d56.js:5
    l http://localhost:8080/assets/main.c8621d56.js:5
    HG http://localhost:8080/assets/main.c8621d56.js:5
    init http://localhost:8080/assets/main.c8621d56.js:5
    d http://localhost:8080/assets/main.c8621d56.js:5
    f http://localhost:8080/assets/main.c8621d56.js:5
    eq http://localhost:8080/assets/main.c8621d56.js:5
    _update http://localhost:8080/assets/main.c8621d56.js:5
    n http://localhost:8080/assets/main.c8621d56.js:5
    get http://localhost:8080/assets/main.c8621d56.js:5
    t http://localhost:8080/assets/main.c8621d56.js:5
    kG http://localhost:8080/assets/main.c8621d56.js:5
    $mount http://localhost:8080/assets/main.c8621d56.js:5
    <anonymous> http://localhost:8080/assets/main.ab148c8b.js:9
main.c8621d56.js:5:25081
nichtich commented 1 year ago

Thanks for reporting. Our current setups always include authentification for write access, so this may be a bug indeed. We'll have a closer look tomorrow.

stefandesu commented 1 year ago

Hello!

I just released version 1.8.2 which should fix this issue. Could you try it out?

Thanks for pointing out the issue! Seems like we should test these rarer cases more often. 🙈

sroertgen commented 1 year ago

Hey @stefandesu,

thanks for the fast fix! It is working now :tada:

The use case is also mentioned, at least in the JSKOS-Server README:

https://github.com/gbv/jskos-server/blob/a00cb3eb53e5da565e565a27a0ca67b6ad07f917/README.md?plain=1#L289-L307

Anyone can create, as well as update and delete, independent of creator:

{
  "read": {
    "auth": false
  },
  "create": {
    "auth": false
  },
  "update": {
    "auth": false,
    "crossUser": true
  },
  "delete": {
    "auth": false,
    "crossUser": true
  }
}

There is another error now popping up, but seems unrelated to the mapping config.

Error: getTranslators: detection is already running
Uncaught (in promise) TypeError: e is null
    t https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    loadGndTerms https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    refresh https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    mounted https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    Vo https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Sa https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    insert https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Q https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    vq https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    _update https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    get https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    run https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    ZG https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Ih https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    promise callback*rd https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Vw https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    update https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    notify https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    set https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    set https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    Pfe https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    _withCommit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    setSelected https://cocoda.openeduhub.net/assets/main-1e48daa4.js:891
    i https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    loadFromParameters https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    $route https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    Vo https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    run https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    ZG https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Ih https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    promise callback*rd https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Vw https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    update https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    notify https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    set https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    init https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    init https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    updateRoute https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    transitionTo https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    confirmTransition https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    rA https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    confirmTransition https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    v https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    npe https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    v https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
main-d13945b0.js:9:33177
    loadGndTerms https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    loadGndTerms self-hosted:1359
    refresh https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    refresh self-hosted:1359
    mounted https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    Vo https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Sa https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    insert https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Q https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    vq https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    _update https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    get https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    run https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    ZG https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Ih https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    (Async: promise callback)
    rd https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Vw https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    update https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    notify https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    set https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    set https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    Pfe https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    forEach self-hosted:203
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    _withCommit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    commit https://cocoda.openeduhub.net/assets/main-1e48daa4.js:45
    setSelected https://cocoda.openeduhub.net/assets/main-1e48daa4.js:891
    InterpretGeneratorResume self-hosted:1822
    AsyncFunctionNext self-hosted:810
    (Async: async)
    setSelected self-hosted:1359
    i https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    loadFromParameters https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    loadFromParameters self-hosted:1359
    $route https://cocoda.openeduhub.net/assets/main-d13945b0.js:9
    Vo https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    run https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    ZG https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Ih https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    (Async: promise callback)
    rd https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    fp https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    Vw https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    update https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    notify https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    set https://cocoda.openeduhub.net/assets/main-1e48daa4.js:5
    init https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    forEach self-hosted:203
    init https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    updateRoute https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    transitionTo https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    confirmTransition https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    rA https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    confirmTransition https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    n https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    v https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    npe https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49
    v https://cocoda.openeduhub.net/assets/main-1e48daa4.js:49

If you want or need further information on this feel free to reach out. Other than that this issue can be closed now.

Thanks!

stefandesu commented 1 year ago

thanks for the fast fix! It is working now 🎉

The use case is also mentioned, at least in the JSKOS-Server README

Of course! Yeah, it was supposed to work (and it has worked in the past), but it there were some undiscovered bugs related to this. So it's great that people are using it and pointing out these things to us! 🙂

There is another error now popping up, but seems unrelated to the mapping config.

Yeah, I'm pretty sure I know what this is, and it should already be fixed in Dev. If it doesn't bother you, it should be fine to ignore that error until we get the current changes in Dev ready for release (might take a few weeks though). Otherwise you could add the GND registry to your configuration to fix the issue right now:

{
  "provider": "LobidApi",
  "uri": "http://coli-conc.gbv.de/registry/lobid-gnd"
}
stefandesu commented 1 year ago

Quick update: The last issue should also be fixed now in v1.9.0.