atviriduomenys / katalogas

Lietuvos atvirų duomenų katalogas (data.gov.lt).
14 stars 2 forks source link

Prieiga prie Saugyklos projektui #262

Open sirex opened 1 year ago

sirex commented 1 year ago

Projektams gali būti išduodamas prieigos prie Saugyklos raktas, kad projektas galėtu pasiekti viešuosius asmens duomenis, pažymėtus access=public. Raktas gali būti išduodamas tik tuo atveju, jei projekto autorius yra autorizuotas per VIISP.

Raktas išduodamas projektui, per projekto puslapyje esantį API meniu, kuriame rodoma informacija, kaip gauti prieigos raktą ir kaip pasiekti duomenis.

Projektui suteikiavas vienas prieigos raktas, tačiau, scopes suteikiami atskirai kiekvienam duomenų rinkiniui, per duomenų rinkinio priskyrimo formą projektui, kuriame reikia nurodyti duomenų naudojimo tikslą.

Priklauso nuo

Susiję

sirex commented 9 months ago

Image -- https://data.gov.lt/projects/427

Panaudojimo atvejo puslapyje atsiranda naujas kontekstinis meniu „Leidimai“, kurį paspaudus, rodo panašų puslapį į Rakto peržiūra puslapį, kuris yra aprašytas čia:

Panaudojimo atvejo leidimų lentelė rodoma tik projekto autoriui ir super administratoriui. Ir tik tuo atveju, jei Panaudojimo atvejis turi bent vieną duomenų rinkinį su access:public lauku.

Leidimų lentelė

Leidimų puslapyje rodoma tokia lentelė:

Duomenų rinkinys Leidimas
COVID-19 pandemijos duomenys ✅ Suteikta

Lentelėje rodomi tokie stulpeliai:

Leidimų lentelėje rodomi duomenų rinkiniai, kuriuos naudoja projektas, t.y. rinkiniai, kurie yra įtraukti į panaudojimo atvejį, tačiau rodomi tik tie rinkiniai, kurie turi bent vieną duomenų lauką, kurio access nėra open.

Leidimų lentelėje negalima nieko keisti ir lentelėje nėra jokių mygtukų.

Prašymas suteikti leidimą

Virš leidimų lentelės rodomas mygtukas „Prašyti leidimų“, kurį paspaudus:

Saugykloje turėtu būti suteikiami tokie leidimai:

Leidimai suteikiami tik konkretiems duomenų rinkiniams, kurie turi access:public laukų. Jokie kiti leidimai nesuteikiami.

Minėti leidimai suteikiami tik tuo atveju, jei duomenų Savininkas patvirtina leidimą, tik tada tie leidimai įtraukiami į raktą Saugykloje. Kol Savininkas nepatvirtina, leidimai saugomi tik ApiScope lentelėje.

Atsiradus naujiems leidimams, sukuriama užduotis duomenų rinkinio organizacijai, kuri turi patvirtinti arba atmesti leidimo prašymą.

Slaptažodžio keitimas

Virš leidimo lentelės rodomas mygtukas „Keisti slaptažodį“, kurį paspaudus, sugeneruojamas naujas slaptažodis, pakeičiams saugykloje per Saugyklos API ir išsaugomas ApiKey lentelėje, užkoduotoje formoje.

Naujas slaptažodis parodomas vieną kartą, virš leidimų lentelės, su informacija, kad slaptažodis bus rodomas vieną kartą.

Leidimų tvarkymas iš organizacijos pusės

Organizacijos raktų valdymas yra toks pat, kaip apibrėžta

Tačiau prie išorinių raktų, sąraše rodomi ne tik Organizacijų raktai, bet ir Panaudojimo atvejų raktai, rodant Panaudojimo atvejo pavadinimą ir nuorodą į patį panaudojimo atvejį.

Atsidarius panaudojimo atvejo raktą, rodomas toks pat Rakto peržiūros puslapis, su galimybe Įjungti arba Išjungti leidimą.

Įjungus leidimą, daroma Saugyklos API užklausa ir leidimas pridedamas prie kliento leidimų.

Leidimų lentelėje, ApiScope laukas enabled gali turėti None reikšmę, kuri reiškia laukimo statusą, t.y.reiškia, kad leidimas, nei suteiktas, nei atmestas. Tokiu atveju, leidimų lentelėje turi būti rodomi du mygtukai, „Įjungti“ ir „Išjungti“.

Pasikeitimai duomenų modelyje

sirex commented 9 months ago

https://test.data.gov.lt/projects/427/apikeys/add/

Image

Prašant leidimų, neturėtu prašyti įvesti rakto pavadinimo, o tiesiog turėtu sukurti naują raktą ir parodyti jo slaptažodį.

Sukūrus raktą, raktas rodomas svetainės viršuje:

Image

Nors turėtu rodyti, svetainės kontekste.

sirex commented 9 months ago

Atidarius organizacijos raktus:

https://test.data.gov.lt/orgs/269/apikeys/

Gaunu:

Internal Server Error: /orgs/269/apikeys/
Traceback (most recent call last):
  File "vitrina/orgs/views.py", line 976, in get_context_data
    ApiKey.objects.create(
  File "django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "django/db/models/query.py", line 451, in create
    obj = self.model(**kwargs)
  File "django/db/models/base.py", line 485, in __init__
    _setattr(self, field.name, rel_obj)
  File "django/db/models/fields/related_descriptors.py", line 215, in __set__
    raise ValueError(
ValueError: Cannot assign "True": "ApiKey.organization" must be a "Organization" instance.
aurjas commented 8 months ago

Testavau su panaudojimo atveju https://test.data.gov.lt/projects/3/permissions/

  1. Pasirinkau skirtuką "Leidimai", kuriame rodo rinkinį "Covid-19 pandemijos duomenys".
  2. Paspaudžiau "Prašyti leidimų", po kurio išdavė raktą.
  3. Nuspaudžiau ant duomenų rinkinio, tada pasirinkau Organizaciją (Valstybės duomenų agentūra) ir iš Organizacijos meniu pasirinkau "Raktai".
  4. Prie "Išoriniai raktai" spaudžiau ant panaudojimo atvejo (https://www.trafi.com) pavadinimo ir naujame lange buvo mytukas "Leisti", kurio nepasirinkau, o vietoje to grįžau keliais žingsniais atgal, į panaudojimo atvejį.
  5. Tai padarius, pakartoti visų žingsnių nebepavyko. Paspaudus "Prašyti leidimų" rakto nebeišdavė. Nuėjus į organizacijos "Raktai" skiltį ir atsidarius panaudojimo atvejį (https://www.trafi.com) buvo tuščias langas su antrašte "Rakto peržiūra". Pabandžiau pašalinti panaudojimo atvejį iš "Išoriniai raktai" prie organizacijos "Raktai" skiltyje, bet gavau klaidą 500 https://test.data.gov.lt/orgs/78/apikeys/767/remove/.
  6. Pakartojau žingsnius su panaudojimo atveju (https://www.regia.lt/) tai pačiai organizacijai (Valstybės duomenų agentūra), tik šįkart "Raktai" skiltyje pasirinkau "Leisti" (žiūrėkite 4 žingsnį). Tačiau gavau klaidą 500 https://test.data.gov.lt/projects/6/permissions/856/toggle/1670/.

Taip pat:

  1. Prie organizacijos "Raktai", skiltyje "Vidiniai raktai" kaip pavadinimą rodo "None", nors turėtų rodyni client_name arba client_id, o ne name.
  2. Prie organizacijos "Raktai", skiltyje "Išoriniai raktai" prie "Pavadinimas" rodo rakto slaptažodį, kurio niekur neturėtų rodyti, o vietoje to, turėtų rodyti client_name arba client_id.
Faustasm commented 8 months ago

Internal Server Error: /orgs/269/apikeys/

Traceback (most recent call last):
  File "vitrina/orgs/views.py", line 976, in get_context_data
    ApiKey.objects.create(
  File "django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "django/db/models/query.py", line 451, in create
    obj = self.model(**kwargs)
  File "django/db/models/base.py", line 485, in __init__
    _setattr(self, field.name, rel_obj)
  File "django/db/models/fields/related_descriptors.py", line 215, in __set__
    raise ValueError(
ValueError: Cannot assign "True": "ApiKey.organization" must be a "Organization" instance.
Faustasm commented 8 months ago

Internal Server Error: /projects/6/permissions/856/toggle/1670/

File "/usr/local/lib/pythonX/json/encoder.py", line 180, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type ApiScope is not JSON serializable
Faustasm commented 8 months ago

Vis dar klaida | Internal Server Error: /orgs/78/apikeys/767/change/

Traceback (most recent call last):
/pythonX/site-packages/django/db/models/query.py", line 435, in get
     raise self.model.DoesNotExist(
 vitrina.orgs.models.Organization.DoesNotExist: Organization matching query does not exist.
Faustasm commented 8 months ago

Su toggle vis dar ta pati klaida

Internal Server Error: /projects/6/permissions/856/toggle/1670/

File "/usr/local/lib/pythonX/json/encoder.py", line 180, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type ApiScope is not JSON serializable
aurjas commented 8 months ago

Taip pat, nelabai aišku, kodėl neleidžia "Prašyti leidimų" čia https://test.data.gov.lt/projects/3/permissions/. Prie organizacijos "Raktai" yra sukurtas įrašas (https://www.trafi.com/) "Išoriniai raktai" skiltyje, bet langas tuščias ir "Įjungti/Išjungti" pasirinkimo nėra.

Pašalinti API rakto taip pat nėra galimybės, išduoda žinutę image

adp-atea commented 8 months ago

Jeigu nėra ryšio su spintos API arba grįžta būsenos kodas ne 200, tada raktas nešalinamas. Reikia prisidėti į .env SPINTA_SERVER_CLIENT_ID ir SPINTA_SERVER_CLIENT_SECRET reikšmes. Taip pat reiktų nusirodyti SPINTA_SERVER_URL reišmę, kuri nebūtų localhost, o veikiantis API adresas.

Faustasm commented 8 months ago

Visi kintamieji prod aplinkoje yra.

Faustasm commented 8 months ago

Kviečiant toggle:

 Internal Server Error: /projects/6/permissions/856/toggle/1670/
 Traceback (most recent call last):
   File "/site-packages/django/core/handlers/exception.py", line 47, in inner
     response = get_response(request)
                ^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/django/core/handlers/base.py", line 181, in _get_response
     response = wrapped_callback(request, *callback_args, **callback_kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/django/views/generic/base.py", line 70, in view
     return self.dispatch(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/vitrina/projects/views.py", line 434, in dispatch
     return super().dispatch(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/django/contrib/auth/mixins.py", line 104, in dispatch
     return super().dispatch(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/django/views/generic/base.py", line 98, in dispatch
     return handler(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/vitrina/projects/views.py", line 469, in get
     response = get_auth_session().post(SPINTA_SERVER_URL + '/auth/clients' + self.apikey.client_id,
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/requests/sessions.py", line 637, in post
     return self.request("POST", url, data=data, json=json, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/requests/sessions.py", line 575, in request
     prep = self.prepare_request(req)
            ^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/site-packages/requests/sessions.py", line 486, in prepare_request
     p.prepare(
   File "/site-packages/requests/models.py", line 371, in prepare
     self.prepare_body(data, files, json)
   File "/site-packages/requests/models.py", line 511, in prepare_body
     body = complexjson.dumps(json, allow_nan=False)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/local/lib/python3.11/json/__init__.py", line 238, in dumps
     **kw).encode(obj)
           ^^^^^^^^^^^
   File "/usr/local/lib/python3.11/json/encoder.py", line 200, in encode
     chunks = self.iterencode(o, _one_shot=True)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/local/lib/python3.11/json/encoder.py", line 258, in iterencode
     return _iterencode(o, 0)
            ^^^^^^^^^^^^^^^^^
   File "/usr/local/lib/python3.11/json/encoder.py", line 180, in default
     raise TypeError(f'Object of type {o.__class__.__name__} '
 TypeError: Object of type ApiScope is not JSON serializable
Faustasm commented 8 months ago

Kviečiant change

 Internal Server Error: /orgs/269/apikeys/757/change/
 Traceback (most recent call last):
   File "site-packages/django/core/handlers/exception.py", line 47, in inner
     response = get_response(request)
                ^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/django/core/handlers/base.py", line 181, in _get_response
     response = wrapped_callback(request, *callback_args, **callback_kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/django/views/generic/base.py", line 70, in view
     return self.dispatch(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/vitrina/orgs/views.py", line 1315, in dispatch
     return super().dispatch(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/django/contrib/auth/mixins.py", line 104, in dispatch
     return super().dispatch(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/django/views/generic/base.py", line 98, in dispatch
     return handler(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/django/views/generic/edit.py", line 190, in get
     return super().get(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/django/views/generic/edit.py", line 133, in get
     return self.render_to_response(self.get_context_data())
                                    ^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/vitrina/orgs/views.py", line 1356, in get_context_data
     org = Organization.objects.filter(name=code.removeprefix('_datasets_gov_')).get()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "site-packages/django/db/models/query.py", line 435, in get
     raise self.model.DoesNotExist(
 vitrina.orgs.models.Organization.DoesNotExist: Organization matching query does not exist.
adp-atea commented 8 months ago

Šios klaidos turėjo būti pataisytos su commitu b05f291, kuris buvo padarytas penktadienį.

Prašau patikrinkite.

sirex commented 7 months ago

https://test.data.gov.lt/orgs/98/apikeys/

Iš panaudojimo atvejo Miškų (VMP) panaudojimo atvejis sukūriau raktą ir paprašiau leidimo prie Privačių vidinės miškotvarkos projektų rengėjų sąrašas duomenų rinkinio, spausdamas „Prašyti leidimų“ mygtuką.

Tačiau, Miškų tarnybos raktų puslapyje, prie „Miškų (VMP) panaudojimo atvejis rakto nėra galimybės patvirtinti prašomą leidimą.

Kaip ir nurodyta užduotyje, organizacijos raktų puslapį, atsidarius išorinį raktą, turi būti galimybė patvirtinti prašomus leidimus arba juos atmesti.

adp-atea commented 7 months ago

Tai trūksta raktų puslapyje pridėti mygtuką Įjungti/Išjungti, kurį matytų ir galėtų paspausti tik organizacijos tvarkytojas/koordinatorius? Screenshot_20240129_122007

JuliusLADP commented 7 months ago

Skelbiamų asmens duomenų prieigos valdymas - užduotis, kuri nebuvo numatyta pirkimo specifikacijoje. Tačiau tai ne pagrindinė bėda. VDAI išaiškinime: https://vdai.lrv.lt/uploads/vdai/documents/files/23%20DUK_atviruju%20duomenu%20ir%20asmens%20duomenu%20santykis%202021-03-10.pdf , kur akcentuojama, kad:

aurjas commented 6 months ago

Pastebėjimai:

  1. Suteikus leidimą (paspaudus mytuką "Įjungti") šiam duomenų rinkiniui https://test.data.gov.lt/datasets/916/ per panaudojimo atvejį https://test.data.gov.lt/projects/439/permissions/, išmeta klaidą "Saugant API raktą įvyko klaida" image

  2. Suteikus leidimą vienam rinkiniui ir prie panaudojimo atvejo https://test.data.gov.lt/projects/439/permissions/ pridėjus dar vieną rinkinį, prašyti leidimų nebeleidžia ir Organizacijų raktų lange naujai pridėtas rinkinys neatsiranda, o taip pat ir įjungti leidimo nėra kaip. Statusas (ikona) yra juodas kvadratas, ne smėlio laikrodis.

image

image

  1. Kadangi leidimai suteikiami tik rinkiniams turintiems access=public lauką (-ų), tai reikėtų, kad rinkinių neturinčių access=public laukų nebūtų galimybės pridėti, nes portalo naudotojas gali pridėti daugybę tokių rinkinių prie panaudojimo atvejo, kas būtų ganėtinai painu ir estetiškai netvarkinga

image

  1. Ar būtų galimybė prie leidimo statuso (kvadratas, smėlio laikrodis, varnelė ir pan.) parašyti ką tas statusas reiškia?