jmainformatique commited on
Commit
87f6db4
·
verified ·
1 Parent(s): 2811d9e

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +25 -0
  2. .gradio/certificate.pem +31 -0
  3. .gradio/flagged/dataset1.csv +61 -0
  4. README.md +2 -8
  5. RGPD/README.md +6 -0
  6. RGPD/Services de prévention et de santé au travail.pdf +3 -0
  7. RGPD/afnor_spec_2217_spsti_08-2023.pdf +0 -0
  8. RGPD/cnil-pia-3-fr-basesdeconnaissances.pdf +0 -0
  9. RGPD/cnil_guide_spst_0 (1).pdf +3 -0
  10. RGPD/guide_pratique_rgpd_-_delegues_a_la_protection_des_donnees.pdf +3 -0
  11. RGPD/registre_rgpd_basique.pdf +0 -0
  12. RGPD/rgpd.py +251 -0
  13. code_test.py +61 -0
  14. factorial.py +14 -0
  15. generated_code_20241109_123707.py +26 -0
  16. generated_code_20241110_105740.py +26 -0
  17. ldap_log.log +3 -0
  18. scan_results.log +35 -0
  19. templates/index.html +120 -0
  20. templates/index2.html +76 -0
  21. templates/index3.html +64 -0
  22. test.pdf +0 -0
  23. test.py +70 -0
  24. test2.py +150 -0
  25. test3.py +28 -0
  26. test4.py +27 -0
  27. test_code_gen.py +59 -0
  28. testgeminicode/bin/Activate.ps1 +247 -0
  29. testgeminicode/bin/activate +69 -0
  30. testgeminicode/bin/activate.csh +26 -0
  31. testgeminicode/bin/activate.fish +69 -0
  32. testgeminicode/bin/celery +8 -0
  33. testgeminicode/bin/dateparser-download +8 -0
  34. testgeminicode/bin/f2py +8 -0
  35. testgeminicode/bin/flask +8 -0
  36. testgeminicode/bin/normalizer +8 -0
  37. testgeminicode/bin/numpy-config +8 -0
  38. testgeminicode/bin/pip +8 -0
  39. testgeminicode/bin/pip3 +8 -0
  40. testgeminicode/bin/pip3.10 +8 -0
  41. testgeminicode/bin/pyrsa-decrypt +8 -0
  42. testgeminicode/bin/pyrsa-encrypt +8 -0
  43. testgeminicode/bin/pyrsa-keygen +8 -0
  44. testgeminicode/bin/pyrsa-priv2pub +8 -0
  45. testgeminicode/bin/pyrsa-sign +8 -0
  46. testgeminicode/bin/pyrsa-verify +8 -0
  47. testgeminicode/bin/python +3 -0
  48. testgeminicode/bin/python3 +3 -0
  49. testgeminicode/bin/python3.10 +3 -0
  50. testgeminicode/bin/scapy +8 -0
.gitattributes CHANGED
@@ -33,3 +33,28 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ RGPD/Services[[:space:]]de[[:space:]]prévention[[:space:]]et[[:space:]]de[[:space:]]santé[[:space:]]au[[:space:]]travail.pdf filter=lfs diff=lfs merge=lfs -text
37
+ RGPD/cnil_guide_spst_0[[:space:]](1).pdf filter=lfs diff=lfs merge=lfs -text
38
+ RGPD/guide_pratique_rgpd_-_delegues_a_la_protection_des_donnees.pdf filter=lfs diff=lfs merge=lfs -text
39
+ testgeminicode/bin/python filter=lfs diff=lfs merge=lfs -text
40
+ testgeminicode/bin/python3 filter=lfs diff=lfs merge=lfs -text
41
+ testgeminicode/bin/python3.10 filter=lfs diff=lfs merge=lfs -text
42
+ testgeminicode/lib/python3.10/site-packages/PyPDF2/_codecs/__pycache__/adobe_glyphs.cpython-310.pyc filter=lfs diff=lfs merge=lfs -text
43
+ testgeminicode/lib/python3.10/site-packages/grpc/_cython/cygrpc.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
44
+ testgeminicode/lib/python3.10/site-packages/lxml/etree.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
45
+ testgeminicode/lib/python3.10/site-packages/lxml/objectify.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
46
+ testgeminicode/lib/python3.10/site-packages/numpy/_core/_multiarray_umath.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
47
+ testgeminicode/lib/python3.10/site-packages/numpy/_core/_simd.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
48
+ testgeminicode/lib/python3.10/site-packages/numpy/random/_generator.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
49
+ testgeminicode/lib/python3.10/site-packages/numpy.libs/libgfortran-040039e1-0352e75f.so.5.0.0 filter=lfs diff=lfs merge=lfs -text
50
+ testgeminicode/lib/python3.10/site-packages/numpy.libs/libscipy_openblas64_-ff651d7f.so filter=lfs diff=lfs merge=lfs -text
51
+ testgeminicode/lib/python3.10/site-packages/pandas/_libs/algos.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
52
+ testgeminicode/lib/python3.10/site-packages/pandas/_libs/groupby.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
53
+ testgeminicode/lib/python3.10/site-packages/pandas/_libs/hashtable.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
54
+ testgeminicode/lib/python3.10/site-packages/pandas/_libs/interval.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
55
+ testgeminicode/lib/python3.10/site-packages/pandas/_libs/join.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
56
+ testgeminicode/lib/python3.10/site-packages/pandas/_libs/tslibs/offsets.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
57
+ testgeminicode/lib/python3.10/site-packages/pydantic_core/_pydantic_core.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
58
+ testgeminicode/lib/python3.10/site-packages/regex/_regex.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
59
+ testgeminicode/lib/python3.10/site-packages/yara.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
60
+ testgeminicode/lib/python3.10/site-packages/yara_python.libs/libcrypto-c62021f9.so.1.1 filter=lfs diff=lfs merge=lfs -text
.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
3
+ TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
4
+ cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
5
+ WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
6
+ ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
7
+ MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
8
+ h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
9
+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
10
+ A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
11
+ T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
12
+ B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
13
+ B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
14
+ KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
15
+ OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
16
+ jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
17
+ qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
18
+ rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
19
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
20
+ hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
21
+ ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
22
+ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
23
+ NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
24
+ ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
25
+ TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
26
+ jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
27
+ oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
28
+ 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
29
+ mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
30
+ emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
31
+ -----END CERTIFICATE-----
.gradio/flagged/dataset1.csv ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ message,Réponse de Gemini,timestamp
2
+ "L’information sur la prise en charge dans une structure de soins, contenue dans un traitement, est-elle une donnée de santé ?","Oui, l'information sur la prise en charge dans une structure de soins, contenue dans un traitement, est généralement considérée comme une **donnée de santé** au sens du RGPD.
3
+
4
+ **Pourquoi ?**
5
+
6
+ * **Lien direct avec la santé :** La prise en charge dans une structure de soins est intrinsèquement liée à la santé physique ou mentale d'une personne. Elle implique qu'une personne a eu besoin de soins médicaux, ce qui est une information relative à sa santé.
7
+ * **Informations potentiellement sensibles :** L'information sur la prise en charge peut révéler des informations sensibles sur la santé de la personne, telles que le type de soins reçus, le diagnostic, la durée du séjour, etc.
8
+
9
+ **Conséquences pour un SPSTI :**
10
+
11
+ Si un SPSTI traite des informations sur la prise en charge de salariés dans des structures de soins, il doit les traiter comme des données de santé et respecter les exigences du RGPD :
12
+
13
+ * **Base légale :** Avoir une base légale pour le traitement de ces données (obligation légale, consentement explicite, intérêt vital, etc.). Dans le cadre du suivi médical des salariés, l'obligation légale est souvent la base légale appropriée.
14
+ * **Finalité déterminée :** Définir précisément la finalité du traitement de ces données et s'y limiter.
15
+ * **Minimisation des données :** Collecter uniquement les informations strictement nécessaires pour la finalité du traitement.
16
+ * **Sécurité :** Mettre en place des mesures de sécurité appropriées pour protéger ces données.
17
+ * **Information des personnes concernées :** Informer les salariés sur la collecte et l'utilisation de ces données.
18
+
19
+
20
+ Il est important de noter que même si l'information sur la prise en charge ne précise pas le motif médical (diagnostic), elle reste une donnée de santé car elle révèle qu'une personne a eu besoin de soins. Le simple fait de savoir qu'une personne a été prise en charge dans une structure de soins est une information relative à sa santé.
21
+ ",2024-11-30 10:25:24.698337
22
+ comment doivent être traités les téléphones personnels des salariés qui sont utilisés dans le cadre professionnel ?,"La question des téléphones personnels utilisés dans le cadre professionnel, souvent appelée BYOD (Bring Your Own Device), est complexe au regard du RGPD, notamment dans un SPSTI qui traite des données de santé. Il n'y a pas de solution unique, et l'approche doit être adaptée au contexte et aux risques.
23
+
24
+ Voici les principaux points à considérer :
25
+
26
+ **1. Encadrer l'utilisation des téléphones personnels :**
27
+
28
+ * **Politique BYOD :** Mettre en place une politique BYOD claire et précise qui définit les conditions d'utilisation des téléphones personnels dans le cadre professionnel. Cette politique doit aborder les aspects suivants :
29
+ * Les usages autorisés et interdits.
30
+ * Les mesures de sécurité à respecter.
31
+ * Les responsabilités de l'employeur et du salarié.
32
+ * Les conséquences en cas de non-respect de la politique.
33
+ * **Séparation des données professionnelles et personnelles :** Mettre en place des solutions pour séparer les données professionnelles et personnelles sur le téléphone (par exemple, profils professionnels, applications dédiées, conteneurs sécurisés). Ceci est particulièrement important pour les données de santé.
34
+ * **Accès aux données du SPSTI :** Limiter l'accès aux données du SPSTI depuis les téléphones personnels au strict nécessaire. Si possible, privilégier l'accès via une plateforme web sécurisée plutôt que le téléchargement de données sur le téléphone.
35
+
36
+ **2. Sécurité :**
37
+
38
+ * **Mots de passe :** Exiger l'utilisation de mots de passe forts et le verrouillage automatique des téléphones.
39
+ * **Chiffrement :** Encourager, voire imposer, le chiffrement des données sur le téléphone.
40
+ * **Logiciels de sécurité :** Exiger l'installation de logiciels antivirus et anti-malware.
41
+ * **Mises à jour :** S'assurer que les téléphones sont à jour avec les dernières mises à jour de sécurité.
42
+ * **Gestion des appareils perdus ou volés :** Mettre en place une procédure pour effacer les données professionnelles à distance en cas de perte ou de vol du téléphone.
43
+
44
+ **3. Aspects RGPD :**
45
+
46
+ * **Finalités :** Définir clairement les finalités du traitement des données sur les téléphones personnels.
47
+ * **Bases légales :** Identifier la base légale pour chaque traitement (obligation légale, consentement, intérêt légitime, etc.). Le consentement du salarié est souvent nécessaire pour l'utilisation de son téléphone personnel à des fins professionnelles.
48
+ * **Information des personnes concernées :** Informer les salariés sur la collecte et l'utilisation des données sur leurs téléphones personnels, ainsi que sur leurs droits.
49
+ * **Registre des activités de traitement :** Documenter les traitements de données effectués sur les téléphones personnels dans le registre des activités de traitement.
50
+
51
+
52
+ **Alternatives au BYOD :**
53
+
54
+ Si les risques liés au BYOD sont jugés trop importants, envisager des alternatives, telles que :
55
+
56
+ * **Fournir des téléphones professionnels :** Fournir aux salariés des téléphones professionnels dédiés à l'usage professionnel. Ceci permet un meilleur contrôle de la sécurité et de la confidentialité des données.
57
+ * **Virtualisation :** Utiliser des solutions de virtualisation pour créer un environnement de travail sécurisé et isolé sur le téléphone personnel.
58
+
59
+
60
+ En résumé, l'utilisation de téléphones personnels dans un SPSTI doit être soigneusement encadrée pour garantir la sécurité et la confidentialité des données de santé. La mise en place d'une politique BYOD, de mesures de sécurité et le respect des principes du RGPD sont essentiels. Si les risques sont jugés trop importants, envisager des alternatives au BYOD.
61
+ ",2024-11-30 10:30:00.518063
README.md CHANGED
@@ -1,12 +1,6 @@
1
  ---
2
  title: RGPD
3
- emoji: 🌖
4
- colorFrom: blue
5
- colorTo: purple
6
  sdk: gradio
7
- sdk_version: 5.8.0
8
- app_file: app.py
9
- pinned: false
10
  ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
  title: RGPD
3
+ app_file: rgpd.py
 
 
4
  sdk: gradio
5
+ sdk_version: 5.7.1
 
 
6
  ---
 
 
RGPD/README.md ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ ---
2
+ title: RGPD
3
+ app_file: rgpd.py
4
+ sdk: gradio
5
+ sdk_version: 5.7.1
6
+ ---
RGPD/Services de prévention et de santé au travail.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d5eff713c385fb94a319369204dabf1bebeb1b009d84dab116ba458a0c1b73f1
3
+ size 1619472
RGPD/afnor_spec_2217_spsti_08-2023.pdf ADDED
Binary file (585 kB). View file
 
RGPD/cnil-pia-3-fr-basesdeconnaissances.pdf ADDED
Binary file (1,000 kB). View file
 
RGPD/cnil_guide_spst_0 (1).pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f501710d92ee8c3ad1ee01c4635daf2b762b9c86eb07bd272c13b111e24aa437
3
+ size 1341591
RGPD/guide_pratique_rgpd_-_delegues_a_la_protection_des_donnees.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a109eb80dbedf415b092d297fa375a6941433b733b0f6bd63f9b16cf87f969da
3
+ size 1586593
RGPD/registre_rgpd_basique.pdf ADDED
Binary file (378 kB). View file
 
RGPD/rgpd.py ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import google.generativeai as genai
4
+ import gradio as gr
5
+
6
+ genai.configure(api_key="AIzaSyD1TJ82gJaI9fL239kdsk6d4t-oLL3G2PE")
7
+
8
+ def upload_to_gemini(path, mime_type=None):
9
+ """Uploads the given file to Gemini.
10
+
11
+ See https://ai.google.dev/gemini-api/docs/prompting_with_media
12
+ """
13
+ file = genai.upload_file(path, mime_type=mime_type)
14
+ print(f"Uploaded file '{file.display_name}' as: {file.uri}")
15
+ return file
16
+
17
+ def wait_for_files_active(files):
18
+ """Waits for the given files to be active.
19
+
20
+ Some files uploaded to the Gemini API need to be processed before they can be
21
+ used as prompt inputs. The status can be seen by querying the file's "state"
22
+ field.
23
+
24
+ This implementation uses a simple blocking polling loop. Production code
25
+ should probably employ a more sophisticated approach.
26
+ """
27
+ print("Waiting for file processing...")
28
+ for name in (file.name for file in files):
29
+ file = genai.get_file(name)
30
+ while file.state.name == "PROCESSING":
31
+ print(".", end="", flush=True)
32
+ time.sleep(10)
33
+ file = genai.get_file(name)
34
+ if file.state.name != "ACTIVE":
35
+ raise Exception(f"File {file.name} failed to process")
36
+ print("...all files ready")
37
+ print()
38
+
39
+ # Create the model
40
+ generation_config = {
41
+ "temperature": 0,
42
+ "top_p": 0.95,
43
+ "top_k": 40,
44
+ "max_output_tokens": 4000,
45
+ "response_mime_type": "text/plain",
46
+ }
47
+
48
+ model = genai.GenerativeModel(
49
+ model_name="gemini-1.5-pro",
50
+ generation_config=generation_config,
51
+ system_instruction="tu es un agent IA DPO (data protector officer) expert en RGPD et spécialisé en données de santé. tu dois répondre au question de façons la plus concise possible, en citant tes sources et tu dois posser des questions si la demande n'est pas assez précise.",
52
+ )
53
+
54
+ # TODO Make these files available on the local file system
55
+ # You may need to update the file paths
56
+ files = [
57
+ upload_to_gemini("afnor_spec_2217_spsti_08-2023.pdf", mime_type="application/pdf"),
58
+ upload_to_gemini("guide_pratique_rgpd_-_delegues_a_la_protection_des_donnees.pdf", mime_type="application/pdf"),
59
+ upload_to_gemini("Services de prévention et de santé au travail.pdf", mime_type="application/pdf"),
60
+ upload_to_gemini("cnil-pia-3-fr-basesdeconnaissances.pdf", mime_type="application/pdf"),
61
+ upload_to_gemini("registre_rgpd_basique.pdf", mime_type="application/pdf"),
62
+ ]
63
+
64
+ # Some files have a processing delay. Wait for them to be ready.
65
+ wait_for_files_active(files)
66
+
67
+ chat_session = model.start_chat(
68
+ history=[
69
+ {
70
+ "role": "user",
71
+ "parts": [
72
+ files[0],
73
+ files[1],
74
+ files[2],
75
+ "Bonjour",
76
+ ],
77
+ },
78
+ {
79
+ "role": "model",
80
+ "parts": [
81
+ "Bonjour.\n\nLe document que vous avez fourni est l'AFNOR SPEC 2217, un référentiel de certification pour les Services de Prévention et de Santé au Travail Interentreprises (SPSTI). Il décrit les exigences que les SPSTI doivent respecter pour être certifiés, notamment en matière de :\n\n* **Qualité et effectivité des services** : Le référentiel exige que les SPSTI fournissent des services de qualité et efficaces dans le cadre de l'offre socle de services.\n* **Organisation et continuité du service** : Les SPSTI doivent avoir une organisation et des procédures claires et efficaces pour assurer la continuité du service.\n* **Gestion financière et tarification** : Le référentiel exige une gestion financière saine et une tarification transparente.\n* **Conformité au RGPD** : Les SPSTI doivent se conformer au Règlement Général sur la Protection des Données (RGPD) pour le traitement des données personnelles.\n* **Interopérabilité et sécurité des systèmes d'information** : Les systèmes d'information des SPSTI doivent être interopérables et sécurisés.\n\nLe référentiel comprend également des exigences spécifiques aux trois missions des SPSTI : la prévention des risques professionnels, le suivi individuel de l'état de santé et la prévention de la désinsertion professionnelle.\n\nPour plus d'informations sur la conformité au RGPD, vous pouvez consulter le guide pratique de la CNIL pour les délégués à la protection des données (DPO) : [https://www.cnil.fr/fr/guide-pratique-rgpd-delegues-la-protection-des-donnees](https://www.cnil.fr/fr/guide-pratique-rgpd-delegues-la-protection-des-donnees)\n\nEt pour plus d'informations sur les SPSTI, vous pouvez consulter le dossier de l'INRS : [https://www.inrs.fr/demarche/services-sante-travail](https://www.inrs.fr/demarche/services-sante-travail)\n\n\nAvez-vous des questions spécifiques sur ce référentiel ou sur la manière dont il s'applique à votre situation ? Par exemple, souhaitez-vous que je détaille un point particulier concernant les données de santé ?\n",
82
+ ],
83
+ },
84
+ {
85
+ "role": "user",
86
+ "parts": [
87
+ "quelle est ta spécialité ?",
88
+ ],
89
+ },
90
+ {
91
+ "role": "model",
92
+ "parts": [
93
+ "Je suis un agent IA DPO expert en RGPD et spécialisé en données de santé. Cela signifie que je suis entraîné sur un large corpus de textes relatifs au RGPD et à son application, en particulier dans le contexte des données de santé. Je peux donc vous aider à comprendre les exigences du RGPD, à identifier les risques liés au traitement des données de santé et à mettre en place des mesures de protection appropriées.\n",
94
+ ],
95
+ },
96
+ {
97
+ "role": "user",
98
+ "parts": [
99
+ "peux tu me lister les données sensibles pouvant faire partie de mon service et que je dois intégrer dans mon RGPD ?",
100
+ ],
101
+ },
102
+ {
103
+ "role": "model",
104
+ "parts": [
105
+ "Pour lister précisément les données sensibles relevant du RGPD que vous traitez dans votre service, j'ai besoin de plus de contexte. Quel type de service proposez-vous ? \n\nCependant, je peux vous donner une liste générale des catégories de données sensibles selon le RGPD qui pourraient être concernées dans un service lié à la santé :\n\n* **Données relatives à la santé** : Il s'agit de la catégorie la plus évidente et la plus large. Elle inclut tout type d'information concernant la santé physique ou mentale d'une personne, passée, présente ou future. Exemples : diagnostics, traitements, résultats d'examens médicaux, informations génétiques, etc. Dans le cadre professionnel, cela peut inclure aussi les données d'accident du travail, de maladie professionnelle, d'aptitude au poste, etc.\n\n* **Données génétiques** : Ces données sont une sous-catégorie des données de santé, mais méritent une attention particulière. Elles se réfèrent aux données relatives aux caractéristiques génétiques héritées ou acquises d'une personne physique qui donnent des informations uniques sur la physiologie ou la santé de cette personne physique et qui résultent notamment d'une analyse d'une échantillon biologique de la personne physique en question.\n\n* **Données biométriques** : Lorsque ces données sont traitées aux fins d'identifier une personne physique de manière unique, elles sont considérées comme sensibles. Exemples : empreintes digitales, reconnaissance faciale, reconnaissance vocale, etc. L'utilisation de la biométrie pour le contrôle d'accès aux dossiers médicaux est un exemple courant dans le secteur de la santé.\n\n* **Données concernant la vie sexuelle ou l'orientation sexuelle** : Ces données sont très sensibles et leur traitement est en principe interdit, sauf exceptions limitativement énumérées par le RGPD. Dans le contexte de la santé, cela pourrait être pertinent dans certains cas très spécifiques, par exemple pour le suivi de certaines pathologies ou traitements.\n\n* **Données relatives à l'origine raciale ou ethnique** : Comme les données concernant la vie sexuelle, le traitement de ces données est en principe interdit, sauf exceptions. Dans le contexte de la santé, cela pourrait être pertinent pour des études médicales ou des recherches sur certaines maladies ayant une prévalence plus élevée dans certains groupes ethniques, mais un encadrement strict est nécessaire.\n\n* **Données relatives aux opinions politiques, aux convictions philosophiques ou religieuses, à l'appartenance syndicale** : Ces données sont moins susceptibles d'être traitées dans un service lié à la santé, mais il est important de les mentionner. Leur traitement est interdit, sauf exceptions.\n\n\nPour que je puisse vous donner une liste plus précise et pertinente, veuillez me fournir des informations sur le type de service que vous proposez. Êtes-vous un professionnel de santé ? Travaillez-vous dans un hôpital, une clinique, un laboratoire, une entreprise de biotechnologie, ou autre ? Quelles sont les activités principales de votre service ?\n",
106
+ ],
107
+ },
108
+ {
109
+ "role": "user",
110
+ "parts": [
111
+ "mon service est un SPSTi (Service de Santé et de Prévention en santé au travail)",
112
+ ],
113
+ },
114
+ {
115
+ "role": "model",
116
+ "parts": [
117
+ "Votre service étant un SPSTI, vous traitez des données de santé particulièrement sensibles. Voici une liste plus précise des données sensibles que vous devez prendre en compte dans le cadre du RGPD :\n\n* **Données médicales des salariés:** Diagnostics, traitements, résultats d'examens médicaux (biologiques, imagerie, etc.), comptes rendus de consultations, antécédents médicaux, fiches d'aptitude, informations sur les expositions professionnelles, dossiers médicaux en santé au travail (DMST), etc.\n\n* **Données relatives aux accidents du travail et aux maladies professionnelles :** Nature de l'accident ou de la maladie, circonstances, traitements, suivi médical, conséquences sur l'aptitude au travail, etc.\n\n* **Données génétiques :** Si vous réalisez des tests génétiques dans le cadre de la surveillance médicale des salariés exposés à certains risques, ces données sont particulièrement sensibles et nécessitent un encadrement très strict.\n\n* **Données biométriques :** Si vous utilisez des systèmes biométriques pour l'identification des salariés (par exemple, pour l'accès aux dossiers médicaux), ces données doivent être traitées avec une grande précaution.\n\n* **Données relatives à la vie sexuelle ou l'orientation sexuelle :** Dans des cas très spécifiques et limités, vous pourriez être amené à traiter ce type de données, par exemple dans le cadre du suivi de certaines pathologies. Il est crucial de respecter les bases légales de traitement et les principes de minimisation et de limitation des finalités.\n\n* **Données relatives à l'origine raciale ou ethnique :** Dans le cadre d'études épidémiologiques ou de recherches médicales, vous pourriez être amené à traiter ce type de données. Là encore, le respect des bases légales et des principes du RGPD est essentiel.\n\n* **Données relatives aux opinions politiques, aux convictions philosophiques ou religieuses, à l'appartenance syndicale :** Le traitement de ces données est très encadré et en principe interdit dans le cadre d'un SPSTI, sauf exceptions très limitées.\n\n\n**Points importants à considérer :**\n\n* **Base légale :** Assurez-vous d'avoir une base légale solide pour chaque traitement de données sensibles. Dans le cadre d'un SPSTI, la base légale la plus courante est l'obligation légale (Code du travail) et le consentement explicite pour les traitements non obligatoires.\n\n* **Principes du RGPD :** Appliquez les principes de minimisation, de limitation des finalités, de sécurité, etc. à tous les traitements de données sensibles.\n\n* **Mesures de sécurité :** Mettez en place des mesures de sécurité techniques et organisationnelles robustes pour protéger les données sensibles contre tout accès non autorisé, toute divulgation, toute altération ou toute destruction.\n\n* **Information des personnes concernées :** Informez clairement les salariés sur les données sensibles que vous collectez, les finalités du traitement, les destinataires, leurs droits, etc.\n\n* **DPO :** Désignez un Délégué à la Protection des Données (DPO) si nécessaire. Vu la nature des données traitées par un SPSTI, la désignation d'un DPO est fortement recommandée, voire obligatoire selon les critères de la CNIL.\n\n* **Registre des activités de traitement :** Documentez tous les traitements de données sensibles dans votre registre des activités de traitement.\n\n\nN'hésitez pas à me poser d'autres questions si vous souhaitez approfondir un point particulier.\n",
118
+ ],
119
+ },
120
+ {
121
+ "role": "user",
122
+ "parts": [
123
+ "qui peut être DPO dans un SPSTI ?",
124
+ ],
125
+ },
126
+ {
127
+ "role": "model",
128
+ "parts": [
129
+ "La désignation d'un DPO pour un SPSTI suit les mêmes règles générales que pour toute autre organisation. Le RGPD ne définit pas de profil type, mais insiste sur les compétences et l'absence de conflit d'intérêts. \n\n**Compétences requises :**\n\n* **Expertise en matière de protection des données :** Connaissance approfondie du RGPD, de la Loi Informatique et Libertés et des autres réglementations applicables.\n* **Connaissance du secteur de la santé au travail :** Compréhension des enjeux spécifiques liés à la santé et à la sécurité au travail, des obligations des SPSTI et du contexte réglementaire.\n* **Compétences techniques :** Capacité à comprendre les systèmes d'information, les mesures de sécurité et les risques liés aux traitements de données.\n* **Qualités personnelles :** Intégrité, rigueur, capacité d'analyse, sens de la communication, diplomatie, autonomie.\n\n\n**Absence de conflit d'intérêts :**\n\nLe DPO ne doit pas occuper de fonction au sein du SPSTI qui le conduirait à déterminer les finalités et les moyens des traitements de données dont il a la charge de contrôler. Exemples de fonctions incompatibles : directeur, médecin chef, responsable du système d'information, responsable des ressources humaines. Un médecin du travail peut être DPO à condition de ne pas avoir de rôle décisionnel dans la détermination des finalités et des moyens des traitements.\n\n**Qui peut être DPO dans un SPSTI ?**\n\n* **Un membre du personnel :** Un salarié du SPSTI peut être désigné DPO, à temps plein ou à temps partiel, à condition qu'il possède les compétences requises et qu'il n'y ait pas de conflit d'intérêts.\n* **Un prestataire externe :** Le SPSTI peut faire appel à un DPO externalisé, ce qui peut être une solution avantageuse, notamment pour les petits SPSTI qui n'ont pas les ressources internes suffisantes. Dans ce cas, un contrat de service doit être établi.\n* **Un DPO mutualisé :** Plusieurs SPSTI peuvent se regrouper pour désigner un DPO commun, ce qui permet de mutualiser les coûts et les compétences. Une convention de mutualisation doit être établie entre les SPSTI.\n\n\n**Points importants :**\n\n* **Formation :** Même si aucune certification n'est obligatoire, il est fortement recommandé que le DPO suive une formation spécialisée en protection des données, en particulier dans le secteur de la santé. La CNIL propose des formations et des certifications pour les DPO.\n* **Ressources :** Le SPSTI doit fournir au DPO les ressources nécessaires pour exercer ses missions : temps, budget, accès à l'information, support de la direction.\n* **Désignation auprès de la CNIL :** Le SPSTI doit désigner son DPO auprès de la CNIL via le formulaire en ligne.\n\n\nIl est important de documenter la désignation du DPO et les raisons pour lesquelles la personne choisie remplit les conditions requises, notamment en termes de compétences et d'absence de conflit d'intérêts. Ce document servira de preuve en cas de contrôle de la CNIL.\n",
130
+ ],
131
+ },
132
+ {
133
+ "role": "user",
134
+ "parts": [
135
+ "dans le cas d'un DPO externe, comment et avec qui doit il travailler au sein du SPSTI ?",
136
+ ],
137
+ },
138
+ {
139
+ "role": "model",
140
+ "parts": [
141
+ "Un DPO externe, bien qu'il ne soit pas un employé du SPSTI, doit interagir avec différents acteurs et services pour mener à bien ses missions. Voici les points clés de la collaboration :\n\n**Avec la direction :**\n\n* **Rapport direct :** Le DPO doit avoir un accès direct à la direction du SPSTI (directeur, président, etc.) pour lui faire part de ses analyses, conseils et recommandations. Cet accès direct est essentiel pour garantir son indépendance et l'efficacité de son action.\n* **Points réguliers :** Des réunions régulières doivent être organisées avec la direction pour discuter des questions de protection des données, des risques identifiés et des actions à mettre en œuvre.\n\n**Avec l'équipe pluridisciplinaire (médecins du travail, IPRP, infirmiers, etc.) :**\n\n* **Collaboration étroite :** Le DPO doit travailler en étroite collaboration avec l'équipe pluridisciplinaire pour les sensibiliser aux enjeux du RGPD, les conseiller sur les bonnes pratiques et les accompagner dans la mise en conformité des traitements de données.\n* **Formation et support :** Le DPO peut organiser des formations et fournir un support aux membres de l'équipe pluridisciplinaire sur les aspects pratiques du RGPD.\n\n**Avec le service informatique :**\n\n* **Échange d'informations :** Le DPO doit échanger régulièrement avec le service informatique sur les mesures de sécurité mises en place, les risques liés aux systèmes d'information et les solutions pour garantir la confidentialité, l'intégrité et la disponibilité des données.\n* **Collaboration sur les projets :** Le DPO doit être impliqué dans les projets informatiques qui ont un impact sur la protection des données, dès la phase de conception (privacy by design).\n\n**Avec les salariés et les représentants du personnel :**\n\n* **Point de contact :** Le DPO est le point de contact pour les salariés et les représentants du personnel sur toutes les questions relatives à la protection des données. Il doit être facilement joignable et répondre à leurs demandes d'information et d'exercice de leurs droits.\n* **Sensibilisation et formation :** Le DPO peut organiser des sessions de sensibilisation et de formation pour les salariés sur les enjeux du RGPD et les bonnes pratiques en matière de protection des données.\n\n**Avec le service en charge du registre des activités de traitement :**\n\n* **Accès au registre :** Le DPO doit avoir accès au registre des activités de traitement pour pouvoir exercer ses missions de contrôle et de conseil. Il peut également être impliqué dans la mise à jour du registre.\n\n**Formalisation de la collaboration :**\n\nIl est important de formaliser les modalités de collaboration entre le DPO externe et le SPSTI dans un contrat de service ou une lettre de mission. Ce document doit préciser :\n\n* Les missions du DPO\n* Ses responsabilités\n* Ses interlocuteurs privilégiés\n* Les ressources mises à sa disposition\n* Les modalités de communication\n* La fréquence des réunions\n\n\nEn résumé, le DPO externe, bien qu'extérieur à la structure, doit être intégré au fonctionnement du SPSTI et travailler en étroite collaboration avec les différents acteurs et services pour assurer une protection efficace des données de santé.\n",
142
+ ],
143
+ },
144
+ {
145
+ "role": "user",
146
+ "parts": [
147
+ "cites tes sources",
148
+ ],
149
+ },
150
+ {
151
+ "role": "model",
152
+ "parts": [
153
+ "Mes sources d'information sont variées et dépendent du type de requête. Pour les informations légales et réglementaires, je m'appuie principalement sur :\n\n* **Le Règlement Général sur la Protection des Données (RGPD) :** Texte de référence en matière de protection des données personnelles en Europe. Disponible sur le site web de la Commission européenne : [https://eur-lex.europa.eu/eli/reg/2016/679/oj](https://eur-lex.europa.eu/eli/reg/2016/679/oj)\n* **La Loi Informatique et Libertés :** Loi française qui transpose et complète le RGPD. Disponible sur Légifrance : [https://www.legifrance.gouv.fr/](https://www.legifrance.gouv.fr/)\n* **Le site web de la CNIL (Commission Nationale de l'Informatique et des Libertés) :** Source d'information essentielle sur le RGPD et la Loi Informatique et Libertés, avec des guides pratiques, des fiches thématiques, des actualités, etc. : [https://www.cnil.fr/](https://www.cnil.fr/)\n* **Le site web du CEPD (Comité Européen de la Protection des Données) :** Organe consultatif indépendant qui émet des avis et des recommandations sur la protection des données. : [https://edpb.europa.eu/edpb_fr](https://edpb.europa.eu/edpb_fr)\n* **Légifrance :** Site web officiel pour consulter les lois et les règlements français.\n\nPour les informations plus spécifiques sur les SPSTI et la santé au travail, je me réfère à :\n\n* **Le Code du travail :**",
154
+ ],
155
+ },
156
+ {
157
+ "role": "user",
158
+ "parts": [
159
+ files[3],
160
+ "voici un document supplémentaire sur lequel t'appuyer pour me répondre",
161
+ ],
162
+ },
163
+ {
164
+ "role": "model",
165
+ "parts": [
166
+ "Merci pour ce document. Il s'agit du guide de la CNIL sur les analyses d'impact relatives à la protection des données (PIA). Il est très utile pour comprendre les risques liés à un traitement de données et pour choisir les mesures de protection appropriées.\n\nEn complément de mes réponses précédentes et en m'appuyant sur ce document, je peux vous donner des informations plus précises sur la façon dont un DPO externe doit travailler au sein d'un SPSTI, notamment en ce qui concerne les PIA.\n\n**Rôle du DPO externe dans les PIA d'un SPSTI :**\n\n* **Conseil et accompagnement :** Le DPO doit conseiller le SPSTI sur la nécessité de réaliser une PIA pour un traitement donné. Il doit l'aider à identifier les risques pour les droits et libertés des personnes concernées et à choisir les mesures de protection appropriées. Le guide de la CNIL fournit une méthodologie et des exemples de mesures qui peuvent être utilisés dans ce cadre.\n* **Réalisation de la PIA :** Le DPO peut être chargé de réaliser la PIA lui-même, en collaboration avec les équipes du SPSTI. Il doit s'assurer que la PIA est complète, rigoureuse et conforme à la méthodologie de la CNIL.\n* **Validation de la PIA :** Le DPO doit valider la PIA avant sa mise en œuvre. Il doit s'assurer que les risques identifiés sont correctement évalués et que les mesures de protection choisies sont adéquates et efficaces.\n* **Suivi et mise à jour :** Le DPO doit suivre la mise en œuvre des mesures de protection et s'assurer qu'elles restent efficaces dans le temps. Il doit également mettre à jour la PIA si le traitement évolue ou si de nouveaux risques sont identifiés.\n\n**Points importants :**\n\n* **Ressources :** Le SPSTI doit fournir au DPO externe les ressources nécessaires pour réaliser ses missions liées aux PIA : temps, accès à l'information, support des équipes.\n* **Documentation :** Le DPO doit documenter son travail sur les PIA, notamment les risques identifiés, les mesures de protection choisies et les justifications de ses décisions.\n* **Collaboration :** Le DPO doit travailler en étroite collaboration avec les équipes du SPSTI, notamment le service informatique, le service juridique et les médecins du travail.\n\n\nLe guide de la CNIL sur les PIA est une ressource précieuse pour le DPO externe. Il lui fournit une méthodologie claire et des exemples concrets pour réaliser et valider les PIA. En utilisant ce guide et en collaborant avec les équipes du SPSTI, le DPO externe peut contribuer à assurer une protection efficace des données de santé.\n",
167
+ ],
168
+ },
169
+ {
170
+ "role": "user",
171
+ "parts": [
172
+ files[4],
173
+ "voici également un modélè de registre de traitement ",
174
+ ],
175
+ },
176
+ {
177
+ "role": "model",
178
+ "parts": [
179
+ "Merci pour le modèle de registre des traitements. C'est un outil essentiel pour la mise en conformité avec le RGPD. Il permet de documenter les traitements de données, d'identifier les risques et de mettre en place les mesures de protection appropriées. \n\nEn tant que DPO (interne ou externe), le registre est un outil indispensable pour :\n\n* **Avoir une vision globale des traitements :** Le registre permet de recenser tous les traitements de données mis en œuvre par le SPSTI, ce qui est essentiel pour identifier les risques et les points d'attention.\n* **Faciliter les analyses d'impact :** Le registre fournit les informations nécessaires pour réaliser les analyses d'impact relatives à la protection des données (PIA).\n* **Répondre aux demandes d'exercice de droits :** Le registre permet de retrouver facilement les informations nécessaires pour répondre aux demandes des personnes concernées (accès, rectification, effacement, etc.).\n* **Démontrer la conformité :** Le registre est un élément de preuve important en cas de contrôle de la CNIL.\n\n\n**Points d'attention pour un SPSTI :**\n\n* **Données sensibles :** Le registre doit identifier clairement les traitements de données sensibles (données de santé, données génétiques, données biométriques, etc.) et les mesures de protection mises en œuvre.\n* **Finalités :** Les finalités de chaque traitement doivent être clairement définies et justifiées.\n* **Bases légales :** La base légale de chaque traitement doit être précisée (obligation légale, consentement, intérêt légitime, etc.).\n* **Destinataires :** Les destinataires des données doivent être identifiés (internes, externes, sous-traitants, etc.).\n* **Transferts hors UE :** Les transferts de données hors de l'Union européenne doivent être documentés et les garanties appropriées doivent être mises en place.\n* **Durées de conservation :** Les durées de conservation des données doivent être définies et justifiées.\n* **Mesures de sécurité :** Les mesures de sécurité techniques et organisationnelles mises en œuvre pour protéger les données doivent être décrites.\n\n\nLe modèle de registre fourni est un bon point de départ, mais il doit être adapté aux spécificités du SPSTI. Il est important de le tenir à jour régulièrement et de s'assurer qu'il reflète fidèlement les traitements de données mis en œuvre.\n\n\nEn complément de ce registre, le DPO peut utiliser d'autres outils pour documenter les traitements et les risques, tels que les PIA, les procédures internes, les contrats avec les sous-traitants, etc.\n\n\n",
180
+ ],
181
+ },
182
+ {
183
+ "role": "user",
184
+ "parts": [
185
+ "concernant les boites mails de mes utilisateurs, que dois je faire ?",
186
+ ],
187
+ },
188
+ {
189
+ "role": "model",
190
+ "parts": [
191
+ "Les boîtes mail de vos utilisateurs, en particulier dans un SPSTI qui manipule des données de santé, nécessitent une attention particulière au regard du RGPD. Voici les points clés à considérer :\n\n**1. Sensibilisation et formation :**\n\n* **Sensibiliser les utilisateurs aux risques :** Il est crucial de sensibiliser vos utilisateurs (médecins du travail, IPRP, assistants, etc.) aux risques liés à l'utilisation des emails, notamment le phishing, les erreurs d'envoi, la divulgation accidentelle de données sensibles.\n* **Former aux bonnes pratiques :** Formez-les aux bonnes pratiques en matière de sécurité des emails, telles que :\n * Ne pas ouvrir les emails d'origine inconnue ou suspecte.\n * Ne pas cliquer sur les liens ou les pièces jointes dans les emails suspects.\n * Utiliser des mots de passe forts et les changer régulièrement.\n * Ne pas communiquer d'informations sensibles par email, sauf si le message est chiffré.\n * Signaler tout email suspect au service informatique.\n\n**2. Mesures techniques :**\n\n* **Solution de messagerie sécurisée :** Choisissez une solution de messagerie sécurisée qui offre des fonctionnalités telles que le chiffrement des emails, l'anti-spam et l'antivirus.\n* **Authentification forte :** Mettez en place l'authentification forte (par exemple, l'authentification à deux facteurs) pour accéder aux boîtes mail.\n* **Chiffrement des emails :** Encouragez, voire imposez, le chiffrement des emails contenant des données sensibles. Des solutions de chiffrement de bout en bout sont disponibles.\n* **Protection contre les logiciels malveillants :** Installez des logiciels antivirus et anti-malware sur tous les postes de travail et tenez-les à jour.\n* **Filtrage des emails :** Mettez en place un système de filtrage des emails pour bloquer les spams et les emails suspects.\n\n**3. Organisation :**\n\n* **Politique d'utilisation des emails :** Rédigez une politique d'utilisation des emails qui précise les règles à respecter en matière de sécurité et de confidentialité. Cette politique doit être communiquée à tous les utilisateurs et régulièrement mise à jour.\n* **Procédure de gestion des incidents :** Mettez en place une procédure de gestion des incidents de sécurité liés aux emails (par exemple, en cas d'erreur d'envoi ou de suspicion de phishing).\n* **Conservation des emails :** Définissez des règles de conservation des emails conformes aux exigences légales et aux besoins du SPSTI. Les emails contenant des données de santé doivent être conservés de manière sécurisée et pendant la durée légale.\n* **Suppression des emails :** Mettez en place des procédures pour supprimer les emails qui ne sont plus nécessaires, en veillant à ce que la suppression soit définitive et irréversible.\n\n**4. Aspects RGPD :**\n\n* **Finalités :** Définissez clairement les finalités du traitement des données contenues dans les emails.\n* **Bases légales :** Identifiez la base légale pour chaque traitement (obligation légale, consentement, intérêt légitime, etc.).\n* **Information des personnes concernées :** Informez les personnes concernées sur la manière dont leurs données sont traitées dans le cadre des emails (collecte, finalités, destinataires, durées de conservation, droits, etc.).\n* **Registre des activités de traitement :** Documentez les traitements de données effectués via les emails dans le registre des activités de traitement.\n\n\nEn résumé, la sécurité et la confidentialité des emails sont essentielles pour un SPSTI. En mettant en place les mesures techniques et organisationnelles appropriées, vous pouvez minimiser les risques et vous conformer aux exigences du RGPD. N'hésitez pas à me poser d'autres questions si vous souhaitez approfondir un point particulier.\n",
192
+ ],
193
+ },
194
+ {
195
+ "role": "user",
196
+ "parts": [
197
+ "L’aptitude à l’exercice d’une activité sportive est-elle une donnée de santé ?",
198
+ ],
199
+ },
200
+ {
201
+ "role": "model",
202
+ "parts": [
203
+ "L'aptitude à l'exercice d'une activité sportive **peut être considérée comme une donnée de santé**, selon le contexte et la manière dont elle est collectée et utilisée.\n\n**Quand l'aptitude sportive est une donnée de santé :**\n\n* **Si elle est liée à un diagnostic médical :** Si l'aptitude est déterminée par un médecin suite à un examen médical et qu'elle est liée à un diagnostic ou à un état de santé particulier (par exemple, une maladie cardiaque, une blessure, etc.), alors elle est clairement une donnée de santé.\n* **Si elle est utilisée pour prendre des décisions concernant la santé :** Si l'aptitude est utilisée pour décider si une personne peut participer à une activité sportive spécifique, pour adapter un programme d'entraînement, ou pour prendre toute autre décision concernant la santé de la personne, alors elle est considérée comme une donnée de santé.\n* **Si elle est collectée par un professionnel de santé :** Si l'aptitude est collectée par un médecin, un kinésithérapeute, ou tout autre professionnel de santé, elle est généralement considérée comme une donnée de santé.\n\n**Quand l'aptitude sportive n'est pas forcément une donnée de santé :**\n\n* **Auto-déclaration sans contexte médical :** Si une personne déclare elle-même son aptitude à pratiquer une activité sportive sans qu'il y ait d'examen médical ou de lien avec une décision concernant sa santé, et que cette information n'est pas utilisée dans un contexte médical, alors elle n'est pas forcément considérée comme une donnée de santé. Par exemple, un formulaire d'inscription à un club de sport qui demande si la personne pratique déjà une activité sportive.\n* **Évaluation de la performance sportive :** Si l'aptitude est évaluée dans le cadre d'un test de performance sportive et qu'elle n'est pas liée à un diagnostic médical, elle n'est pas nécessairement une donnée de santé. Par exemple, un test de VO2 max pour évaluer les capacités physiques d'un athlète.\n\n\n**En résumé :**\n\nLa distinction clé est le **contexte**. Si l'aptitude à l'exercice d'une activité sportive est liée à la santé d'une personne, utilisée dans un contexte médical, ou collectée par un professionnel de santé, alors elle est considérée comme une donnée de santé et doit être traitée conformément au RGPD. Dans les autres cas, elle n'est pas forcément une donnée de santé, mais il est important de respecter les principes généraux du RGPD (finalités, bases légales, information des personnes concernées, etc.).\n\nDans le contexte d'un SPSTI, il est probable que l'aptitude à l'exercice d'une activité sportive soit souvent liée à la santé au travail et donc considérée comme une donnée de santé. Il est donc important d'être vigilant et de traiter cette information avec la même précaution que les autres données de santé.\n",
204
+ ],
205
+ },
206
+ {
207
+ "role": "user",
208
+ "parts": [
209
+ "L’information sur un taux d’invalidité, contenue dans un traitement, est-elle une donnée de santé ?",
210
+ ],
211
+ },
212
+ {
213
+ "role": "model",
214
+ "parts": [
215
+ "Oui, l'information sur un taux d'invalidité contenue dans un traitement est considérée comme une **donnée de santé** au sens du RGPD.\n\nLe RGPD définit les données de santé comme les données concernant la santé physique ou mentale d'une personne physique, y compris la prestation de services de",
216
+ ],
217
+ },
218
+ {
219
+ "role": "user",
220
+ "parts": [
221
+ "Le numéro d’inscription au répertoire national d’identification des personnes physiques (NIR) est-il une donnée de santé ?",
222
+ ],
223
+ },
224
+ {
225
+ "role": "model",
226
+ "parts": [
227
+ "Non, le numéro d'inscription au répertoire national d'identification des personnes physiques (NIR), plus communément appelé numéro de sécurité sociale, **n'est pas en soi une donnée de santé** selon le RGPD. \n\nIl s'agit d'une donnée à caractère personnel, et plus précisément d'un identifiant unique. Cependant, il ne révèle rien en soi sur la santé physique ou mentale d'une personne.\n\n**Pourquoi le NIR est sensible dans le contexte de la santé :**\n\nBien que n'étant pas une donnée de santé en soi, le NIR est souvent utilisé dans le secteur de la santé pour identifier les patients et accéder à leurs dossiers médicaux. C'est cette association avec des données de santé qui le rend sensible. L'utilisation du NIR permet de relier facilement cette information à d'autres données concernant la santé de la personne.\n\n**Conséquences pour le traitement du NIR dans un SPSTI :**\n\nDans le cadre d'un SPSTI, le NIR est utilisé pour identifier les salariés et gérer leur suivi médical. De ce fait, il est essentiel de le protéger avec la même rigueur que les données de santé. \n\n* **Minimisation :** Collecter le NIR uniquement si cela est strictement nécessaire pour la finalité du traitement.\n* **Sécurité :** Mettre en place des mesures de sécurité robustes pour protéger le NIR contre tout accès non autorisé, toute divulgation, toute altération ou toute destruction.\n* **Information des personnes concernées :** Informer les salariés sur la collecte et l'utilisation de leur NIR, ainsi que sur leurs droits.\n* **Registre des activités de traitement :** Documenter le traitement du NIR dans le registre des activités de traitement.\n\n\nEn résumé, le NIR n'est pas une donnée de santé en soi, mais son utilisation dans le contexte de la santé nécessite une protection renforcée en raison de son lien avec des données de santé. Il est donc crucial pour un SPSTI de traiter le NIR avec la même précaution que les autres données sensibles.\n",
228
+ ],
229
+ },
230
+ ]
231
+ )
232
+
233
+ def chat_with_gemini(message):
234
+ global chat_session # Access the global chat_session
235
+
236
+ response = chat_session.send_message(message)
237
+ return response.text
238
+
239
+
240
+ iface = gr.Interface(
241
+ fn=chat_with_gemini,
242
+ inputs=gr.Textbox(lines=5, placeholder="Entrez votre question ici..."),
243
+ outputs=gr.Textbox(lines=25, label="Réponse de Gemini"),
244
+ title="Agent IA DPO pour les SPSTi",
245
+ description="Posez vos questions sur le RGPD et les données de santé en milieu professionnel, en particulier dans le contexte des SPSTi.",
246
+ theme="huggingface", # Optional: Use a specific theme
247
+ )
248
+
249
+
250
+ if __name__ == "__main__":
251
+ iface.launch()
code_test.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from snmp import CommunityData, ContextData, SNMPv1, SNMPv2c, SNMPv3
2
+ from snmp import Version
3
+ from ipaddress import IPv4Network
4
+ import socket
5
+
6
+ def get_printers(community="public", ip_range="192.168.251.0/24", version=Version.V1):
7
+ oids = {
8
+ "printer_name": "1.3.6.1.2.1.25.3.2.1.3",
9
+ "printer_status": "1.3.6.1.2.1.25.3.5.1.1",
10
+ "printer_location": "1.3.6.1.2.1.1.6"
11
+
12
+ }
13
+
14
+ printers = []
15
+
16
+ for ip in IPv4Network(ip_range):
17
+ ip_str = str(ip)
18
+ if ip_str == "192.168.251.249":
19
+ continue
20
+
21
+ try:
22
+ if version == Version.V1:
23
+ snmp_client = SNMPv1(CommunityData(community))
24
+ elif version == Version.V2c:
25
+ snmp_client = SNMPv2c(CommunityData(community))
26
+ else: # Version 3
27
+ snmp_client = SNMPv3(ContextData())
28
+
29
+ printer_info = {}
30
+
31
+ for key, oid in oids.items():
32
+ try:
33
+ result = snmp_client.get(oid, ip_str)
34
+ printer_info[key] = result.value
35
+ except socket.timeout:
36
+ #print(f"Timeout for {ip_str}")
37
+ break
38
+ except Exception as e:
39
+ #print(f"Error querying {ip_str}: {e}")
40
+ break
41
+
42
+ if printer_info:
43
+ printer_info["ip"] = ip_str
44
+ printers.append(printer_info)
45
+
46
+ except Exception as e:
47
+ # print(f"SNMP error for {ip_str}: {e}") # Handle SNMP errors
48
+ pass
49
+
50
+ return printers
51
+
52
+
53
+
54
+
55
+ if __name__ == "__main__":
56
+ printers = get_printers()
57
+ if printers:
58
+ for printer in printers:
59
+ print(printer)
60
+ else:
61
+ print("No printers found.")
factorial.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from datetime import datetime, timedelta
3
+
4
+ last_month = datetime.now() - timedelta(days=30)
5
+ last_month_timestamp = int(last_month.timestamp())
6
+
7
+ command = f"last -t {last_month_timestamp}"
8
+ output = os.popen(command).read()
9
+ print(output)
10
+
11
+ lines = output.strip().split('\n')
12
+ login_count = len(lines) -1
13
+ print(f"\nNombre de connexions depuis le mois dernier: {login_count}")
14
+
generated_code_20241109_123707.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from scapy.all import *
2
+ import sys
3
+
4
+ conf.iface = "eno1"
5
+ target_ip = "192.168.251.253"
6
+ my_ip = "192.168.251.249"
7
+
8
+ ports = range(1, 1025) # Ports to scan
9
+
10
+ open_ports = []
11
+
12
+ for port in ports:
13
+ pkt = IP(dst=target_ip, src=my_ip)/TCP(dport=port, flags="S")
14
+ response = sr1(pkt, timeout=1, verbose=0)
15
+
16
+ if response is None:
17
+ pass # No response
18
+ elif response.haslayer(TCP):
19
+ if response.getlayer(TCP).flags == 0x12: # SYN-ACK
20
+ send(IP(dst=target_ip, src=my_ip)/TCP(dport=port, flags="R"), verbose=0) # Send RST to close connection
21
+ open_ports.append(port)
22
+ elif response.getlayer(TCP).flags == 0x14: # RST
23
+ pass # Port closed
24
+
25
+ print(f"Open ports on {target_ip}: {open_ports}")
26
+
generated_code_20241110_105740.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ldap3 import Server, Connection, ALL
2
+ from loguru import logger
3
+
4
+ logger.add("ldap_log.log", level="DEBUG")
5
+
6
+ server_uri = "192.168.251.8"
7
+ try:
8
+ server = Server(server_uri, get_info=ALL)
9
+ logger.debug(f"Server info: {server.info}")
10
+ conn = Connection(server, auto_bind=True)
11
+ logger.debug("Successfully bound to the server")
12
+
13
+ search_base = "dc=example,dc=com" # Replace with your AD domain base DN
14
+ search_filter = "(objectClass=*)"
15
+ attributes = ["*"]
16
+
17
+ conn.search(search_base=search_base, search_filter=search_filter, attributes=attributes)
18
+ logger.debug(f"Search results: {conn.entries}")
19
+
20
+ except Exception as e:
21
+ logger.exception(f"Error: {e}")
22
+
23
+ finally:
24
+ if 'conn' in locals() and conn:
25
+ conn.unbind()
26
+
ldap_log.log ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ 2024-11-10 10:57:40.342 | DEBUG | __main__:<module>:9 - Server info: None
2
+ 2024-11-10 10:57:40.348 | DEBUG | __main__:<module>:11 - Successfully bound to the server
3
+ 2024-11-10 10:57:40.350 | DEBUG | __main__:<module>:18 - Search results: []
scan_results.log ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2024-11-09 18:50:22.891 | INFO | __main__:<module>:16 - Scan results for 192.168.251.113:
2
+ 2024-11-09 18:50:22.891 | INFO | __main__:<module>:19 - Port 22/open - ssh (7.4)
3
+ 2024-11-09 18:50:22.893 | WARNING | __main__:<module>:24 - Port 22 is reachable and potentially vulnerable.
4
+ 2024-11-09 18:50:22.893 | INFO | __main__:<module>:19 - Port 80/open - http (2.4.6)
5
+ 2024-11-09 18:50:22.894 | WARNING | __main__:<module>:24 - Port 80 is reachable and potentially vulnerable.
6
+ 2024-11-09 18:50:22.894 | INFO | __main__:<module>:19 - Port 514/open - shell ()
7
+ 2024-11-09 18:50:22.895 | WARNING | __main__:<module>:24 - Port 514 is reachable and potentially vulnerable.
8
+ 2024-11-09 18:50:22.895 | INFO | __main__:<module>:19 - Port 3306/open - mysql ()
9
+ 2024-11-09 18:50:22.895 | WARNING | __main__:<module>:24 - Port 3306 is reachable and potentially vulnerable.
10
+ 2024-11-09 18:50:22.896 | INFO | __main__:<module>:19 - Port 4000/open - http ()
11
+ 2024-11-09 18:50:22.896 | WARNING | __main__:<module>:24 - Port 4000 is reachable and potentially vulnerable.
12
+ 2024-11-09 18:50:22.896 | INFO | __main__:<module>:19 - Port 5000/open - http ()
13
+ 2024-11-09 18:50:22.897 | WARNING | __main__:<module>:24 - Port 5000 is reachable and potentially vulnerable.
14
+ 2024-11-09 18:50:22.897 | INFO | __main__:<module>:19 - Port 5021/open - http ()
15
+ 2024-11-09 18:50:22.898 | WARNING | __main__:<module>:24 - Port 5021 is reachable and potentially vulnerable.
16
+ 2024-11-09 18:50:22.898 | INFO | __main__:<module>:19 - Port 5218/open - http ()
17
+ 2024-11-09 18:50:22.898 | WARNING | __main__:<module>:24 - Port 5218 is reachable and potentially vulnerable.
18
+ 2024-11-09 18:50:22.898 | INFO | __main__:<module>:19 - Port 5318/open - http ()
19
+ 2024-11-09 18:50:22.899 | WARNING | __main__:<module>:24 - Port 5318 is reachable and potentially vulnerable.
20
+ 2024-11-09 18:50:22.899 | INFO | __main__:<module>:19 - Port 5500/open - hotline ()
21
+ 2024-11-09 18:50:22.899 | WARNING | __main__:<module>:24 - Port 5500 is reachable and potentially vulnerable.
22
+ 2024-11-09 18:50:22.899 | INFO | __main__:<module>:19 - Port 5600/open - esmmanager ()
23
+ 2024-11-09 18:50:22.901 | WARNING | __main__:<module>:24 - Port 5600 is reachable and potentially vulnerable.
24
+ 2024-11-09 18:50:22.901 | INFO | __main__:<module>:19 - Port 8000/open - http-alt ()
25
+ 2024-11-09 18:50:22.903 | WARNING | __main__:<module>:24 - Port 8000 is reachable and potentially vulnerable.
26
+ 2024-11-09 18:50:22.903 | INFO | __main__:<module>:19 - Port 27017/open - mongod ()
27
+ 2024-11-09 18:50:22.907 | WARNING | __main__:<module>:24 - Port 27017 is reachable and potentially vulnerable.
28
+ 2024-11-09 18:50:22.907 | WARNING | __main__:<module>:31 - Open ports detected: [22, 80, 514, 3306, 4000, 5000, 5021, 5218, 5318, 5500, 5600, 8000, 27017]
29
+ 2024-11-09 18:51:44.327 | INFO | __main__:<module>:26 - Port 22 is open. Service: ssh, Version: 7.4
30
+ 2024-11-09 18:51:44.327 | INFO | __main__:<module>:26 - Port 80 is open. Service: http, Version: 2.4.6
31
+ 2024-11-09 18:51:44.328 | INFO | __main__:<module>:28 - Port 443 is closed
32
+ 2024-11-09 18:51:44.329 | WARNING | __main__:<module>:34 - Port 22 (SSH) is open. This could be a security risk if not properly configured.
33
+ 2024-11-09 18:51:44.329 | WARNING | __main__:<module>:39 - Port 80 (HTTP) or 443 (HTTPS) is open. Ensure web server security best practices are followed.
34
+ 2024-11-09 18:51:44.330 | INFO | __main__:<module>:45 - Possible OS:
35
+ 2024-11-09 18:51:44.330 | INFO | __main__:<module>:47 - Name: Linux 3.2 - 4.9, Accuracy: 100
templates/index.html ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="fr">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Chat avec IA</title>
7
+ <style>
8
+ body {
9
+ font-family: Arial, sans-serif;
10
+ margin: 0;
11
+ padding: 0;
12
+ display: flex;
13
+ justify-content: center;
14
+ align-items: center;
15
+ height: 100vh;
16
+ background-color: #f4f4f9;
17
+ }
18
+ .chat-container {
19
+ width: 400px;
20
+ background-color: #fff;
21
+ border-radius: 10px;
22
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
23
+ overflow: hidden;
24
+ }
25
+ .chat-header {
26
+ background-color: #007bff;
27
+ color: #fff;
28
+ padding: 10px;
29
+ text-align: center;
30
+ }
31
+ .chat-messages {
32
+ height: 300px;
33
+ padding: 10px;
34
+ overflow-y: scroll;
35
+ border-bottom: 1px solid #ddd;
36
+ }
37
+ .chat-input {
38
+ display: flex;
39
+ padding: 10px;
40
+ }
41
+ .chat-input input {
42
+ flex: 1;
43
+ padding: 10px;
44
+ border: 1px solid #ddd;
45
+ border-radius: 5px;
46
+ }
47
+ .chat-input button {
48
+ padding: 10px 20px;
49
+ margin-left: 10px;
50
+ border: none;
51
+ background-color: #007bff;
52
+ color: #fff;
53
+ border-radius: 5px;
54
+ cursor: pointer;
55
+ }
56
+ .chat-input button:hover {
57
+ background-color: #0056b3;
58
+ }
59
+ .message {
60
+ margin-bottom: 10px;
61
+ }
62
+ .message.user {
63
+ text-align: right;
64
+ }
65
+ .message.bot {
66
+ text-align: left;
67
+ }
68
+ </style>
69
+ </head>
70
+ <body>
71
+ <div class="chat-container">
72
+ <div class="chat-header">
73
+ <h2>Chat avec IA</h2>
74
+ </div>
75
+ <div class="chat-messages" id="chat-messages">
76
+ <!-- Messages will be appended here -->
77
+ </div>
78
+ <div class="chat-input">
79
+ <input type="text" id="user-input" placeholder="Écrivez votre message...">
80
+ <button onclick="sendMessage()">Envoyer</button>
81
+ </div>
82
+ </div>
83
+
84
+ <script>
85
+ function sendMessage() {
86
+ const userInput = document.getElementById('user-input').value;
87
+ if (userInput.trim() === '') return;
88
+
89
+ // Ajouter le message de l'utilisateur à la conversation
90
+ addMessage(userInput, 'user');
91
+
92
+ // Envoyer le message à l'IA
93
+ fetch('/chat', {
94
+ method: 'POST',
95
+ headers: {
96
+ 'Content-Type': 'application/json'
97
+ },
98
+ body: JSON.stringify({ message: userInput })
99
+ })
100
+ .then(response => response.json())
101
+ .then(data => {
102
+ // Ajouter la réponse de l'IA à la conversation
103
+ addMessage(data.response, 'bot');
104
+ });
105
+
106
+ // Effacer le champ d'entrée
107
+ document.getElementById('user-input').value = '';
108
+ }
109
+
110
+ function addMessage(text, sender) {
111
+ const chatMessages = document.getElementById('chat-messages');
112
+ const messageElement = document.createElement('div');
113
+ messageElement.classList.add('message', sender);
114
+ messageElement.textContent = text;
115
+ chatMessages.appendChild(messageElement);
116
+ chatMessages.scrollTop = chatMessages.scrollHeight;
117
+ }
118
+ </script>
119
+ </body>
120
+ </html>
templates/index2.html ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- templates/index.html -->
2
+ <!DOCTYPE html>
3
+ <html lang="fr">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Interface Gemini</title>
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ </head>
10
+ <body class="bg-gray-100 min-h-screen p-12">
11
+ <div class="">
12
+ <h1 class="text-3xl font-bold mb-8 text-center">Interface Gemini - Générateur de Code</h1>
13
+
14
+ <div class="bg-white rounded-lg shadow-md p-6 mb-6">
15
+ <form id="prompt-form" enctype="multipart/form-data">
16
+ <textarea id="prompt" class="w-full h-32 p-4 border rounded-lg mb-4"
17
+ placeholder="Entrez votre demande ici..."></textarea>
18
+ <input type="file" name="pdf_file" accept=".pdf" class="mb-4">
19
+ <button type="submit"
20
+ class="w-full bg-blue-500 text-white py-2 px-4 rounded-lg hover:bg-blue-600">
21
+ Générer et Exécuter
22
+ </button>
23
+ </form>
24
+ </div>
25
+
26
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
27
+ <div class="bg-white rounded-lg shadow-md p-6">
28
+ <h2 class="text-xl font-semibold mb-4">Code Généré</h2>
29
+ <pre id="generatedCode" class="bg-gray-100 p-4 rounded-lg overflow-x-auto"></pre>
30
+ </div>
31
+ <div class="bg-white rounded-lg shadow-md p-6">
32
+ <h2 class="text-xl font-semibold mb-4">Résultat de l'Exécution</h2>
33
+ <pre id="output" class="bg-gray-100 p-4 rounded-lg overflow-x-auto"></pre>
34
+ </div>
35
+ </div>
36
+ </div>
37
+
38
+ <script>
39
+ const form = document.getElementById('prompt-form');
40
+
41
+ form.addEventListener('submit', async (event) => {
42
+ event.preventDefault();
43
+
44
+ const prompt = document.getElementById('prompt').value;
45
+ const generatedCodeElement = document.getElementById('generatedCode');
46
+ const outputElement = document.getElementById('output');
47
+ const pdfFile = document.querySelector('input[name="pdf_file"]').files[0];
48
+
49
+ try {
50
+ const formData = new FormData();
51
+ formData.append('prompt', prompt);
52
+
53
+ if (pdfFile) {
54
+ formData.append('pdf_file', pdfFile);
55
+ }
56
+
57
+ const response = await fetch('/generate', {
58
+ method: 'POST',
59
+ body: formData // Ne pas définir le Content-Type, il sera automatiquement défini
60
+ });
61
+
62
+ if (!response.ok) {
63
+ throw new Error(`Erreur ${response.status}: ${response.statusText}`);
64
+ }
65
+
66
+ const data = await response.json();
67
+ generatedCodeElement.textContent = data.code;
68
+ outputElement.textContent = data.output;
69
+ } catch (error) {
70
+ console.error('Erreur:', error);
71
+ outputElement.textContent = `Erreur: ${error.message}`;
72
+ }
73
+ });
74
+ </script>
75
+ </body>
76
+ </html>
templates/index3.html ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- templates/index.html -->
2
+ <!DOCTYPE html>
3
+ <html lang="fr">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Interface Gemini</title>
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ </head>
10
+ <body class="bg-gray-100 min-h-screen p-12">
11
+ <div class="">
12
+ <h1 class="text-3xl font-bold mb-8 text-center">Interface Gemini - Générateur de Code</h1>
13
+
14
+ <div class="bg-white rounded-lg shadow-md p-6 mb-6">
15
+ <textarea id="prompt" class="w-full h-32 p-4 border rounded-lg mb-4"
16
+ placeholder="Entrez votre demande ici..."></textarea>
17
+ <button onclick="generateCode()"
18
+ class="w-full bg-blue-500 text-white py-2 px-4 rounded-lg hover:bg-blue-600">
19
+ Générer et Exécuter
20
+ </button>
21
+ </div>
22
+
23
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
24
+ <div class="bg-white rounded-lg shadow-md p-6">
25
+ <h2 class="text-xl font-semibold mb-4">Code Généré</h2>
26
+ <pre id="generatedCode" class="bg-gray-100 p-4 rounded-lg overflow-x-auto"></pre>
27
+ </div>
28
+ <div class="bg-white rounded-lg shadow-md p-6">
29
+ <h2 class="text-xl font-semibold mb-4">Résultat de l'Exécution</h2>
30
+ <pre id="output" class="bg-gray-100 p-4 rounded-lg overflow-x-auto"></pre>
31
+ </div>
32
+ </div>
33
+ </div>
34
+
35
+ <script>
36
+ async function generateCode() {
37
+ const prompt = document.getElementById('prompt').value;
38
+ const generatedCodeElement = document.getElementById('generatedCode');
39
+ const outputElement = document.getElementById('output');
40
+
41
+ try {
42
+ const response = await fetch('/generate', {
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/json',
46
+ },
47
+ body: JSON.stringify({ prompt }),
48
+ });
49
+
50
+ if (!response.ok) {
51
+ throw new Error('Erreur lors de la génération du code');
52
+ }
53
+
54
+ const data = await response.json();
55
+
56
+ generatedCodeElement.textContent = data.code;
57
+ outputElement.textContent = data.output;
58
+ } catch (error) {
59
+ outputElement.textContent = `Erreur: ${error.message}`;
60
+ }
61
+ }
62
+ </script>
63
+ </body>
64
+ </html>
test.pdf ADDED
Binary file (768 kB). View file
 
test.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ from flask import Flask, render_template, request, jsonify
3
+ import os
4
+ import google.generativeai as genai
5
+ import subprocess
6
+ from datetime import datetime
7
+
8
+ app = Flask(__name__)
9
+
10
+ # Configuration de l'API Gemini
11
+ genai.configure(api_key="AIzaSyD1TJ82gJaI9fL239kdsk6d4t-oLL3G2PE")
12
+
13
+ def initialize_chat():
14
+ model = genai.GenerativeModel(
15
+ model_name='gemini-1.5-pro',
16
+ system_instruction="tu es un générateur de code python. Tu peux utiliser seulement les librairie scapy,nmap,pyshark,loguru,pandas,psutil,celery,ldap3 si besoin.l'interface réseau de ma machine est 'eno1';mon adresse ip est '192.168.251.249'. tu dois générer le code complet pour qu'il puisse être exécuté; rajouter les commandes 'verbose' lors de l'utilisation des outils;ne génère pas de commentaires, de fichiers logs, ni d'explications"
17
+ )
18
+ return model.start_chat(history=[
19
+ {"role": "user", "parts": "Bonjour"},
20
+ {"role": "model", "parts": "Bonjour, je suis un générateur de code python et je ne génère que du code python"},
21
+ ])
22
+
23
+ def execute_code(code):
24
+ filename = f"generated_code_{datetime.now().strftime('%Y%m%d_%H%M%S')}.py"
25
+
26
+ with open(filename, "w") as f:
27
+ f.write(code)
28
+
29
+ try:
30
+ result = subprocess.run(["python3", filename], capture_output=True, text=True, check=True)
31
+ output = result.stdout
32
+ except subprocess.CalledProcessError as e:
33
+ output = f"Erreur d'exécution:\n{e.stderr}"
34
+ #finally:
35
+ # Nettoyer le fichier temporaire
36
+ #if os.path.exists(filename):
37
+ #os.remove(filename)
38
+
39
+ return output
40
+
41
+ @app.route('/')
42
+ def home():
43
+ return render_template('index.html')
44
+
45
+ @app.route('/generate', methods=['POST'])
46
+ def generate():
47
+ prompt = request.json.get('prompt')
48
+
49
+ if not prompt:
50
+ return jsonify({'error': 'Prompt manquant'}), 400
51
+
52
+ try:
53
+ chat = initialize_chat()
54
+ response = chat.send_message(prompt)
55
+
56
+ # Nettoyer le code généré
57
+ code = response.text.replace("```python\n", "").replace("```", "")
58
+
59
+ # Exécuter le code
60
+ output = execute_code(code)
61
+
62
+ return jsonify({
63
+ 'code': code,
64
+ 'output': output
65
+ })
66
+ except Exception as e:
67
+ return jsonify({'error': str(e)}), 500
68
+
69
+ if __name__ == '__main__':
70
+ app.run(debug=True, host="0.0.0.0")
test2.py ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, request, jsonify
2
+ import os
3
+ import google.generativeai as genai
4
+ import subprocess
5
+ from datetime import datetime
6
+ from pathlib import Path
7
+ import secrets
8
+ from functools import wraps
9
+
10
+ app = Flask(__name__)
11
+ app.config['SECRET_KEY'] = secrets.token_hex(32)
12
+
13
+ # Secure configuration - Move to environment variables
14
+ ALLOWED_LIBRARIES = {'scapy', 'nmap', 'loguru', 'pandas', 'psutil', 'celery', 'ldap3', 'os', 'datetime', 'moment', 'time'}
15
+ NETWORK_INTERFACE = 'eno1'
16
+ IP_ADDRESS = '192.168.251.249'
17
+ MACHINE_OS = 'linux'
18
+ GEMINI_API_KEY = "AIzaSyD1TJ82gJaI9fL239kdsk6d4t-oLL3G2PE" # Move API key to environment variable
19
+
20
+ if not GEMINI_API_KEY:
21
+ raise ValueError("GEMINI_API_KEY environment variable is not set")
22
+
23
+ genai.configure(api_key=GEMINI_API_KEY)
24
+
25
+ def rate_limit(max_calls, time_frame):
26
+ def decorator(f):
27
+ calls = {}
28
+ @wraps(f)
29
+ def wrapper(*args, **kwargs):
30
+ now = datetime.now()
31
+ ip = request.remote_addr
32
+ if ip not in calls:
33
+ calls[ip] = []
34
+ # Clean old calls
35
+ calls[ip] = [call_time for call_time in calls[ip]
36
+ if (now - call_time).total_seconds() < time_frame]
37
+ if len(calls[ip]) >= max_calls:
38
+ return jsonify({'error': 'Rate limit exceeded'}), 429
39
+ calls[ip].append(now)
40
+ return f(*args, **kwargs)
41
+ return wrapper
42
+ return decorator
43
+
44
+ def initialize_chat():
45
+ model = genai.GenerativeModel(
46
+ model_name='gemini-1.5-pro',
47
+ system_instruction=(
48
+ "You are a Python code generator.Your machine is a linux system. Only use the following libraries: "
49
+ f"{', '.join(ALLOWED_LIBRARIES)}. Network interface: {NETWORK_INTERFACE}; "
50
+ f"IP address: {IP_ADDRESS}. Generate complete, executable code with verbose "
51
+ "commands. Do not generate comments, log files, or explanations."
52
+ "si tu dois travailler sur des répertoires, tu dois vérifier s'ils existent avant"
53
+ )
54
+ )
55
+ return model.start_chat(history=[
56
+ {"role": "user", "parts": "Bonjour"},
57
+ {"role": "model", "parts": "Bonjour, je suis un générateur de code python et je ne génère que du code python"},
58
+ ])
59
+
60
+ def validate_code(code):
61
+ """Validate that the code only imports allowed libraries."""
62
+ import ast
63
+ try:
64
+ tree = ast.parse(code)
65
+ for node in ast.walk(tree):
66
+ if isinstance(node, ast.Import):
67
+ for name in node.names:
68
+ if name.name.split('.')[0] not in ALLOWED_LIBRARIES:
69
+ return False
70
+ elif isinstance(node, ast.ImportFrom):
71
+ if node.module.split('.')[0] not in ALLOWED_LIBRARIES:
72
+ return False
73
+ return True
74
+ except SyntaxError:
75
+ return False
76
+
77
+ def secure_execute_code(code):
78
+ """Execute code in a secure manner with timeout and resource limits."""
79
+ if not validate_code(code):
80
+ return "Error: Code contains unauthorized imports"
81
+
82
+ # Create a secure directory for temporary files
83
+ temp_dir = Path("secure_temp")
84
+ temp_dir.mkdir(exist_ok=True)
85
+
86
+ filename = temp_dir / f"generated_code_{secrets.token_hex(8)}.py"
87
+
88
+ try:
89
+ with open(filename, "w") as f:
90
+ f.write(code)
91
+
92
+ # Execute with resource limits and timeout
93
+ result = subprocess.run(
94
+ ["python3", str(filename)],
95
+ capture_output=True,
96
+ text=True,
97
+ timeout=300, # 30 second timeout
98
+ check=True
99
+ )
100
+ return result.stdout
101
+ except subprocess.TimeoutExpired:
102
+ return "Error: Execution timeout"
103
+ except subprocess.CalledProcessError as e:
104
+ return f"Execution error:\n{e.stderr}"
105
+ except Exception as e:
106
+ return f"Error: {str(e)}"
107
+ finally:
108
+ # Clean up
109
+ if filename.exists():
110
+ filename.unlink()
111
+
112
+ @app.route('/')
113
+ def home():
114
+ return render_template('index.html')
115
+
116
+ @app.route('/generate', methods=['POST'])
117
+ @rate_limit(max_calls=10, time_frame=60) # 10 calls per minute
118
+ def generate():
119
+ if not request.is_json:
120
+ return jsonify({'error': 'Content-Type must be application/json'}), 415
121
+
122
+ prompt = request.json.get('prompt')
123
+
124
+ if not prompt:
125
+ return jsonify({'error': 'Missing prompt'}), 400
126
+
127
+ try:
128
+ chat = initialize_chat()
129
+ response = chat.send_message(prompt)
130
+
131
+ # Clean generated code
132
+ code = response.text.strip()
133
+ if code.startswith("```python"):
134
+ code = code[10:]
135
+ if code.endswith("```"):
136
+ code = code[:-3]
137
+ code = code.strip()
138
+
139
+ # Execute code
140
+ output = secure_execute_code(code)
141
+
142
+ return jsonify({
143
+ 'code': code,
144
+ 'output': output
145
+ })
146
+ except Exception as e:
147
+ return jsonify({'error': str(e)}), 500
148
+
149
+ if __name__ == '__main__':
150
+ app.run(debug=False, host="0.0.0.0")
test3.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import datetime
4
+ import moment
5
+
6
+ def recent_files(days=7, directory="/"):
7
+ now = time.time()
8
+ cutoff = now - (days * 86400)
9
+
10
+ result = []
11
+
12
+ for root, _, files in os.walk(directory):
13
+ for file in files:
14
+ full_path = os.path.join(root, file)
15
+ stat = os.stat(full_path)
16
+
17
+ if stat.st_ctime > cutoff or stat.st_mtime > cutoff:
18
+ mtime = datetime.datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S')
19
+ ctime = datetime.datetime.fromtimestamp(stat.st_ctime).strftime('%Y-%m-%d %H:%M:%S')
20
+ result.append({"path": full_path, "mtime": mtime, "ctime": ctime})
21
+
22
+
23
+ return result
24
+
25
+ recent_files_list = recent_files(days=1, directory="/home")
26
+
27
+ for item in recent_files_list:
28
+ print(f"Path: {item['path']}, Modified Time: {item['mtime']}, Created Time: {item['ctime']}")
test4.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import google.generativeai as genai
3
+
4
+ genai.configure(api_key="AIzaSyD1TJ82gJaI9fL239kdsk6d4t-oLL3G2PE") # Remplacez par votre clé API
5
+
6
+ model = genai.GenerativeModel(model_name='gemini-1.5-pro', tools=[genai.Tool.CODE_EXECUTION])
7
+
8
+ chat = model.start_chat()
9
+
10
+ # Première requête: Demander le code
11
+ response = chat.send_message("What is the sum of the first 50 prime numbers? Generate Python code for the calculation, and make sure you get all 50.")
12
+
13
+ # Extraire le code de la réponse (Gemini devrait le fournir dans un bloc de code)
14
+ code_block = None
15
+ for tool_code in response.tool_code:
16
+ if tool_code.type == 'code':
17
+ code_block = tool_code
18
+ break
19
+
20
+ if code_block:
21
+ # Exécuter le code avec l'outil code_execution
22
+ execution_response = chat.send_message(code_block.code)
23
+
24
+ # Afficher le résultat de l'exécution
25
+ print(execution_response.text)
26
+ else:
27
+ print("Gemini n'a pas retourné de code exécutable.")
test_code_gen.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from scapy.all import *
2
+ from loguru import logger
3
+ import nmap
4
+
5
+ # Network interface and local IP
6
+ interface = "eno1"
7
+ local_ip = "192.168.251.249"
8
+ target_ip = "192.168.251.51"
9
+
10
+ # Port scanning using nmap
11
+ nm = nmap.PortScanner()
12
+ nm.scan(hosts=target_ip, arguments='-T4 -sV -sC')
13
+
14
+
15
+ open_ports = []
16
+ for proto in nm[target_ip].all_protocols():
17
+ lport = nm[target_ip][proto].keys()
18
+ for port in lport:
19
+ if nm[target_ip][proto][port]['state'] == 'open':
20
+ open_ports.append((port, nm[target_ip][proto][port]['name'], nm[target_ip][proto][port]['product'], nm[target_ip][proto][port]['version']))
21
+
22
+
23
+
24
+ if open_ports:
25
+ print(f"Open ports on {target_ip}:")
26
+ for port, service, product, version in open_ports:
27
+ print(f"Port: {port} ({service}), Product: {product}, Version: {version}")
28
+
29
+ if "9100" in str(port) or "ipp" in str(port).lower():
30
+ print("\nPotential vulnerability: Port 9100 (IPP) is often misconfigured and can lead to unauthorized printing or information disclosure.")
31
+ print("Consider disabling IPP or ensuring proper access controls are in place.\n")
32
+ if "515" in str(port) or "lpd" in str(port).lower():
33
+ print("\nPotential vulnerability: Port 515 (LPD) can be exploited for denial-of-service attacks or unauthorized printing.")
34
+
35
+ if "631" in str(port) or "ipp" in str(port).lower():
36
+ print("\nPotential vulnerability: Port 631 (IPP) is often misconfigured and can lead to unauthorized printing or information disclosure.")
37
+ print("Consider disabling IPP or ensuring proper access controls are in place.\n")
38
+
39
+
40
+
41
+ else:
42
+ print(f"No open ports found on {target_ip}")
43
+
44
+
45
+ # Check for common printer vulnerabilities
46
+
47
+
48
+ # Sniffing for printer traffic (requires root privileges)
49
+ try:
50
+ print("\nSniffing for printer traffic (first 5 packets)...")
51
+ packets = sniff(count=5, filter=f"host {target_ip}", iface=interface)
52
+ if packets:
53
+ print("Captured packets:")
54
+ for packet in packets:
55
+ print(packet.summary())
56
+ else:
57
+ print("No printer traffic captured.")
58
+ except:
59
+ logger.error("Sniffing requires root privileges.")
testgeminicode/bin/Activate.ps1 ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <#
2
+ .Synopsis
3
+ Activate a Python virtual environment for the current PowerShell session.
4
+
5
+ .Description
6
+ Pushes the python executable for a virtual environment to the front of the
7
+ $Env:PATH environment variable and sets the prompt to signify that you are
8
+ in a Python virtual environment. Makes use of the command line switches as
9
+ well as the `pyvenv.cfg` file values present in the virtual environment.
10
+
11
+ .Parameter VenvDir
12
+ Path to the directory that contains the virtual environment to activate. The
13
+ default value for this is the parent of the directory that the Activate.ps1
14
+ script is located within.
15
+
16
+ .Parameter Prompt
17
+ The prompt prefix to display when this virtual environment is activated. By
18
+ default, this prompt is the name of the virtual environment folder (VenvDir)
19
+ surrounded by parentheses and followed by a single space (ie. '(.venv) ').
20
+
21
+ .Example
22
+ Activate.ps1
23
+ Activates the Python virtual environment that contains the Activate.ps1 script.
24
+
25
+ .Example
26
+ Activate.ps1 -Verbose
27
+ Activates the Python virtual environment that contains the Activate.ps1 script,
28
+ and shows extra information about the activation as it executes.
29
+
30
+ .Example
31
+ Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
32
+ Activates the Python virtual environment located in the specified location.
33
+
34
+ .Example
35
+ Activate.ps1 -Prompt "MyPython"
36
+ Activates the Python virtual environment that contains the Activate.ps1 script,
37
+ and prefixes the current prompt with the specified string (surrounded in
38
+ parentheses) while the virtual environment is active.
39
+
40
+ .Notes
41
+ On Windows, it may be required to enable this Activate.ps1 script by setting the
42
+ execution policy for the user. You can do this by issuing the following PowerShell
43
+ command:
44
+
45
+ PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
46
+
47
+ For more information on Execution Policies:
48
+ https://go.microsoft.com/fwlink/?LinkID=135170
49
+
50
+ #>
51
+ Param(
52
+ [Parameter(Mandatory = $false)]
53
+ [String]
54
+ $VenvDir,
55
+ [Parameter(Mandatory = $false)]
56
+ [String]
57
+ $Prompt
58
+ )
59
+
60
+ <# Function declarations --------------------------------------------------- #>
61
+
62
+ <#
63
+ .Synopsis
64
+ Remove all shell session elements added by the Activate script, including the
65
+ addition of the virtual environment's Python executable from the beginning of
66
+ the PATH variable.
67
+
68
+ .Parameter NonDestructive
69
+ If present, do not remove this function from the global namespace for the
70
+ session.
71
+
72
+ #>
73
+ function global:deactivate ([switch]$NonDestructive) {
74
+ # Revert to original values
75
+
76
+ # The prior prompt:
77
+ if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
78
+ Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
79
+ Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
80
+ }
81
+
82
+ # The prior PYTHONHOME:
83
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
84
+ Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
85
+ Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
86
+ }
87
+
88
+ # The prior PATH:
89
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
90
+ Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
91
+ Remove-Item -Path Env:_OLD_VIRTUAL_PATH
92
+ }
93
+
94
+ # Just remove the VIRTUAL_ENV altogether:
95
+ if (Test-Path -Path Env:VIRTUAL_ENV) {
96
+ Remove-Item -Path env:VIRTUAL_ENV
97
+ }
98
+
99
+ # Just remove VIRTUAL_ENV_PROMPT altogether.
100
+ if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
101
+ Remove-Item -Path env:VIRTUAL_ENV_PROMPT
102
+ }
103
+
104
+ # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
105
+ if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
106
+ Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
107
+ }
108
+
109
+ # Leave deactivate function in the global namespace if requested:
110
+ if (-not $NonDestructive) {
111
+ Remove-Item -Path function:deactivate
112
+ }
113
+ }
114
+
115
+ <#
116
+ .Description
117
+ Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
118
+ given folder, and returns them in a map.
119
+
120
+ For each line in the pyvenv.cfg file, if that line can be parsed into exactly
121
+ two strings separated by `=` (with any amount of whitespace surrounding the =)
122
+ then it is considered a `key = value` line. The left hand string is the key,
123
+ the right hand is the value.
124
+
125
+ If the value starts with a `'` or a `"` then the first and last character is
126
+ stripped from the value before being captured.
127
+
128
+ .Parameter ConfigDir
129
+ Path to the directory that contains the `pyvenv.cfg` file.
130
+ #>
131
+ function Get-PyVenvConfig(
132
+ [String]
133
+ $ConfigDir
134
+ ) {
135
+ Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
136
+
137
+ # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
138
+ $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
139
+
140
+ # An empty map will be returned if no config file is found.
141
+ $pyvenvConfig = @{ }
142
+
143
+ if ($pyvenvConfigPath) {
144
+
145
+ Write-Verbose "File exists, parse `key = value` lines"
146
+ $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
147
+
148
+ $pyvenvConfigContent | ForEach-Object {
149
+ $keyval = $PSItem -split "\s*=\s*", 2
150
+ if ($keyval[0] -and $keyval[1]) {
151
+ $val = $keyval[1]
152
+
153
+ # Remove extraneous quotations around a string value.
154
+ if ("'""".Contains($val.Substring(0, 1))) {
155
+ $val = $val.Substring(1, $val.Length - 2)
156
+ }
157
+
158
+ $pyvenvConfig[$keyval[0]] = $val
159
+ Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
160
+ }
161
+ }
162
+ }
163
+ return $pyvenvConfig
164
+ }
165
+
166
+
167
+ <# Begin Activate script --------------------------------------------------- #>
168
+
169
+ # Determine the containing directory of this script
170
+ $VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
171
+ $VenvExecDir = Get-Item -Path $VenvExecPath
172
+
173
+ Write-Verbose "Activation script is located in path: '$VenvExecPath'"
174
+ Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
175
+ Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
176
+
177
+ # Set values required in priority: CmdLine, ConfigFile, Default
178
+ # First, get the location of the virtual environment, it might not be
179
+ # VenvExecDir if specified on the command line.
180
+ if ($VenvDir) {
181
+ Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
182
+ }
183
+ else {
184
+ Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
185
+ $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
186
+ Write-Verbose "VenvDir=$VenvDir"
187
+ }
188
+
189
+ # Next, read the `pyvenv.cfg` file to determine any required value such
190
+ # as `prompt`.
191
+ $pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
192
+
193
+ # Next, set the prompt from the command line, or the config file, or
194
+ # just use the name of the virtual environment folder.
195
+ if ($Prompt) {
196
+ Write-Verbose "Prompt specified as argument, using '$Prompt'"
197
+ }
198
+ else {
199
+ Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
200
+ if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
201
+ Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
202
+ $Prompt = $pyvenvCfg['prompt'];
203
+ }
204
+ else {
205
+ Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
206
+ Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
207
+ $Prompt = Split-Path -Path $venvDir -Leaf
208
+ }
209
+ }
210
+
211
+ Write-Verbose "Prompt = '$Prompt'"
212
+ Write-Verbose "VenvDir='$VenvDir'"
213
+
214
+ # Deactivate any currently active virtual environment, but leave the
215
+ # deactivate function in place.
216
+ deactivate -nondestructive
217
+
218
+ # Now set the environment variable VIRTUAL_ENV, used by many tools to determine
219
+ # that there is an activated venv.
220
+ $env:VIRTUAL_ENV = $VenvDir
221
+
222
+ if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
223
+
224
+ Write-Verbose "Setting prompt to '$Prompt'"
225
+
226
+ # Set the prompt to include the env name
227
+ # Make sure _OLD_VIRTUAL_PROMPT is global
228
+ function global:_OLD_VIRTUAL_PROMPT { "" }
229
+ Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
230
+ New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
231
+
232
+ function global:prompt {
233
+ Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
234
+ _OLD_VIRTUAL_PROMPT
235
+ }
236
+ $env:VIRTUAL_ENV_PROMPT = $Prompt
237
+ }
238
+
239
+ # Clear PYTHONHOME
240
+ if (Test-Path -Path Env:PYTHONHOME) {
241
+ Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
242
+ Remove-Item -Path Env:PYTHONHOME
243
+ }
244
+
245
+ # Add the venv to the PATH
246
+ Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
247
+ $Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
testgeminicode/bin/activate ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file must be used with "source bin/activate" *from bash*
2
+ # you cannot run it directly
3
+
4
+ deactivate () {
5
+ # reset old environment variables
6
+ if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
7
+ PATH="${_OLD_VIRTUAL_PATH:-}"
8
+ export PATH
9
+ unset _OLD_VIRTUAL_PATH
10
+ fi
11
+ if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
12
+ PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
13
+ export PYTHONHOME
14
+ unset _OLD_VIRTUAL_PYTHONHOME
15
+ fi
16
+
17
+ # This should detect bash and zsh, which have a hash command that must
18
+ # be called to get it to forget past commands. Without forgetting
19
+ # past commands the $PATH changes we made may not be respected
20
+ if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
21
+ hash -r 2> /dev/null
22
+ fi
23
+
24
+ if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
25
+ PS1="${_OLD_VIRTUAL_PS1:-}"
26
+ export PS1
27
+ unset _OLD_VIRTUAL_PS1
28
+ fi
29
+
30
+ unset VIRTUAL_ENV
31
+ unset VIRTUAL_ENV_PROMPT
32
+ if [ ! "${1:-}" = "nondestructive" ] ; then
33
+ # Self destruct!
34
+ unset -f deactivate
35
+ fi
36
+ }
37
+
38
+ # unset irrelevant variables
39
+ deactivate nondestructive
40
+
41
+ VIRTUAL_ENV="/home/padoa/GEMINI/testgeminicode"
42
+ export VIRTUAL_ENV
43
+
44
+ _OLD_VIRTUAL_PATH="$PATH"
45
+ PATH="$VIRTUAL_ENV/bin:$PATH"
46
+ export PATH
47
+
48
+ # unset PYTHONHOME if set
49
+ # this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
50
+ # could use `if (set -u; : $PYTHONHOME) ;` in bash
51
+ if [ -n "${PYTHONHOME:-}" ] ; then
52
+ _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
53
+ unset PYTHONHOME
54
+ fi
55
+
56
+ if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
57
+ _OLD_VIRTUAL_PS1="${PS1:-}"
58
+ PS1="(testgeminicode) ${PS1:-}"
59
+ export PS1
60
+ VIRTUAL_ENV_PROMPT="(testgeminicode) "
61
+ export VIRTUAL_ENV_PROMPT
62
+ fi
63
+
64
+ # This should detect bash and zsh, which have a hash command that must
65
+ # be called to get it to forget past commands. Without forgetting
66
+ # past commands the $PATH changes we made may not be respected
67
+ if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
68
+ hash -r 2> /dev/null
69
+ fi
testgeminicode/bin/activate.csh ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file must be used with "source bin/activate.csh" *from csh*.
2
+ # You cannot run it directly.
3
+ # Created by Davide Di Blasi <[email protected]>.
4
+ # Ported to Python 3.3 venv by Andrew Svetlov <[email protected]>
5
+
6
+ alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate'
7
+
8
+ # Unset irrelevant variables.
9
+ deactivate nondestructive
10
+
11
+ setenv VIRTUAL_ENV "/home/padoa/GEMINI/testgeminicode"
12
+
13
+ set _OLD_VIRTUAL_PATH="$PATH"
14
+ setenv PATH "$VIRTUAL_ENV/bin:$PATH"
15
+
16
+
17
+ set _OLD_VIRTUAL_PROMPT="$prompt"
18
+
19
+ if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
20
+ set prompt = "(testgeminicode) $prompt"
21
+ setenv VIRTUAL_ENV_PROMPT "(testgeminicode) "
22
+ endif
23
+
24
+ alias pydoc python -m pydoc
25
+
26
+ rehash
testgeminicode/bin/activate.fish ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file must be used with "source <venv>/bin/activate.fish" *from fish*
2
+ # (https://fishshell.com/); you cannot run it directly.
3
+
4
+ function deactivate -d "Exit virtual environment and return to normal shell environment"
5
+ # reset old environment variables
6
+ if test -n "$_OLD_VIRTUAL_PATH"
7
+ set -gx PATH $_OLD_VIRTUAL_PATH
8
+ set -e _OLD_VIRTUAL_PATH
9
+ end
10
+ if test -n "$_OLD_VIRTUAL_PYTHONHOME"
11
+ set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
12
+ set -e _OLD_VIRTUAL_PYTHONHOME
13
+ end
14
+
15
+ if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
16
+ set -e _OLD_FISH_PROMPT_OVERRIDE
17
+ # prevents error when using nested fish instances (Issue #93858)
18
+ if functions -q _old_fish_prompt
19
+ functions -e fish_prompt
20
+ functions -c _old_fish_prompt fish_prompt
21
+ functions -e _old_fish_prompt
22
+ end
23
+ end
24
+
25
+ set -e VIRTUAL_ENV
26
+ set -e VIRTUAL_ENV_PROMPT
27
+ if test "$argv[1]" != "nondestructive"
28
+ # Self-destruct!
29
+ functions -e deactivate
30
+ end
31
+ end
32
+
33
+ # Unset irrelevant variables.
34
+ deactivate nondestructive
35
+
36
+ set -gx VIRTUAL_ENV "/home/padoa/GEMINI/testgeminicode"
37
+
38
+ set -gx _OLD_VIRTUAL_PATH $PATH
39
+ set -gx PATH "$VIRTUAL_ENV/bin" $PATH
40
+
41
+ # Unset PYTHONHOME if set.
42
+ if set -q PYTHONHOME
43
+ set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
44
+ set -e PYTHONHOME
45
+ end
46
+
47
+ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
48
+ # fish uses a function instead of an env var to generate the prompt.
49
+
50
+ # Save the current fish_prompt function as the function _old_fish_prompt.
51
+ functions -c fish_prompt _old_fish_prompt
52
+
53
+ # With the original prompt function renamed, we can override with our own.
54
+ function fish_prompt
55
+ # Save the return status of the last command.
56
+ set -l old_status $status
57
+
58
+ # Output the venv prompt; color taken from the blue of the Python logo.
59
+ printf "%s%s%s" (set_color 4B8BBE) "(testgeminicode) " (set_color normal)
60
+
61
+ # Restore the return status of the previous command.
62
+ echo "exit $old_status" | .
63
+ # Output the original/"old" prompt.
64
+ _old_fish_prompt
65
+ end
66
+
67
+ set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
68
+ set -gx VIRTUAL_ENV_PROMPT "(testgeminicode) "
69
+ end
testgeminicode/bin/celery ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from celery.__main__ import main
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(main())
testgeminicode/bin/dateparser-download ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from dateparser_cli.cli import entrance
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(entrance())
testgeminicode/bin/f2py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from numpy.f2py.f2py2e import main
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(main())
testgeminicode/bin/flask ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from flask.cli import main
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(main())
testgeminicode/bin/normalizer ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from charset_normalizer.cli import cli_detect
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(cli_detect())
testgeminicode/bin/numpy-config ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from numpy._configtool import main
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(main())
testgeminicode/bin/pip ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from pip._internal.cli.main import main
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(main())
testgeminicode/bin/pip3 ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from pip._internal.cli.main import main
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(main())
testgeminicode/bin/pip3.10 ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from pip._internal.cli.main import main
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(main())
testgeminicode/bin/pyrsa-decrypt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from rsa.cli import decrypt
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(decrypt())
testgeminicode/bin/pyrsa-encrypt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from rsa.cli import encrypt
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(encrypt())
testgeminicode/bin/pyrsa-keygen ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from rsa.cli import keygen
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(keygen())
testgeminicode/bin/pyrsa-priv2pub ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from rsa.util import private_to_public
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(private_to_public())
testgeminicode/bin/pyrsa-sign ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from rsa.cli import sign
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(sign())
testgeminicode/bin/pyrsa-verify ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from rsa.cli import verify
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(verify())
testgeminicode/bin/python ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:caec073da847da0ba8e22059a61a877b38b25e0454c2d83520dea2b25c88bbec
3
+ size 5941832
testgeminicode/bin/python3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:caec073da847da0ba8e22059a61a877b38b25e0454c2d83520dea2b25c88bbec
3
+ size 5941832
testgeminicode/bin/python3.10 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:caec073da847da0ba8e22059a61a877b38b25e0454c2d83520dea2b25c88bbec
3
+ size 5941832
testgeminicode/bin/scapy ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ #!/home/padoa/GEMINI/testgeminicode/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ import re
4
+ import sys
5
+ from scapy.main import interact
6
+ if __name__ == '__main__':
7
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8
+ sys.exit(interact())