Merge pull request #15 from Reckless-Satoshi/user-generator-page

User generator page
This commit is contained in:
Reckless_Satoshi 2022-01-03 09:10:18 +00:00 committed by GitHub
commit 17d8c2f88c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 89767 additions and 763 deletions

5
.gitignore vendored
View File

@ -637,4 +637,7 @@ FodyWeavers.xsd
# Django
*migrations*
frontend/static/frontend*
frontend/static/frontend/main*
# robosats
frontend/static/assets/avatars*

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,452 @@
adverbs = [
"Utterly",
"Rapturously",
"Most",
"Unfairly",
"Always",
"Up",
"Patiently",
"Nearby",
"Fortunately",
"Potentially",
"Astonishingly",
"Conceivably",
"Excitedly",
"Hungrily",
"Badly",
"About",
"Certainly",
"Tenderly",
"Predictably",
"Sedately",
"Equally",
"Truthfully",
"Formerly",
"Restfully",
"Jokingly",
"Unexpectedly",
"However",
"Extremely",
"Amazingly",
"Quite",
"Lawfully",
"Emptily",
"Affectionately",
"Nevertheless",
"Nicely",
"Seriously",
"Hardly",
"Justly",
"Sternly",
"Cruelly",
"Today",
"Understandingly",
"Backwards",
"Powerfully",
"Understandably",
"Accusingly",
"Irritably",
"Violently",
"Commonly",
"How",
"Wrongly",
"Loudly",
"Innocently",
"Probably",
"Meaningfully",
"Conspicuously",
"Rightly",
"Overseas",
"Wildly",
"Awkwardly",
"Finally",
"Absently",
"Inwardly",
"Likely",
"Greedily",
"Breathlessly",
"Ideally",
"Miserably",
"Deceivingly",
"Tonight",
"Simply",
"Yet",
"Compassionately",
"Crisply",
"Decidedly",
"Last",
"Inadequately",
"Perpetually",
"Lots",
"Busily",
"Fervently",
"Late",
"Solemnly",
"Enviously",
"Not",
"Happily",
"Wearily",
"Nearly",
"Before",
"Openly",
"Intensely",
"Much",
"Fiercely",
"Enormously",
"Separately",
"Helpfully",
"Tremendously",
"Blindly",
"Long",
"First",
"Energetically",
"Partially",
"Lately",
"Incredibly",
"Awfully",
"Regularly",
"Now",
"Crossly",
"Increasingly",
"Indeed",
"Practically",
"Famously",
"Down",
"Over",
"Spitefully",
"Desperately",
"Harshly",
"Distinctly",
"Confidentially",
"Inadvertently",
"Best",
"Disgustingly",
"Sleepily",
"Ferociously",
"Incidentally",
"Naturally",
"Selfishly",
"Rightfully",
"Lightly",
"Shyly",
"Longingly",
"Superstitiously",
"Too",
"Suspiciously",
"Especially",
"Stingily",
"Rarely",
"Curiously",
"Poorly",
"Very",
"Downstairs",
"Briskly",
"Thus",
"Exactly",
"Yearly",
"Evenly",
"Clumsily",
"Daintily",
"Heartily",
"Gratefully",
"Elegantly",
"Quick",
"Terribly",
"Never",
"Already",
"Behind",
"Frenetically",
"Unlike",
"Obviously",
"Meekly",
"Wonderingly",
"Brightly",
"Thoroughly",
"Doubtfully",
"Wrong",
"Sheepishly",
"Moreover",
"Messily",
"Wisely",
"Wonderfully",
"Properly",
"Tightly",
"Slow",
"Absolutely",
"Closely",
"Repeatedly",
"Underground",
"Mockingly",
"Abroad",
"Positively",
"Briefly",
"Reproachfully",
"Lazily",
"Hopefully",
"Continually",
"Generally",
"Theoretically",
"Just",
"Freely",
"Playfully",
"Carefully",
"Intently",
"Slowly",
"Mysteriously",
"There",
"Fairly",
"Pleasantly",
"Madly",
"Speedily",
"Off",
"Calmly",
"Deliberately",
"Hard",
"Clearly",
"Frankly",
"Quintessentially",
"Tensely",
"East",
"Quaveringly",
"Mentally",
"Consequently",
"Less",
"Determinedly",
"Grumpily",
"Searchingly",
"Stubbornly",
"Unwillingly",
"Bravely",
"Neatly",
"Generously",
"Eventually",
"Gleefully",
"Anyway",
"Dangerously",
"Highly",
"Presumably",
"Cheerfully",
"Quietly",
"So",
"Fearlessly",
"Low",
"Angrily",
"Therefore",
"Rather",
"Easily",
"Ultimately",
"Earlier",
"Again",
"Early",
"Ravenously",
"Cautiously",
"Perfectly",
"Foolishly",
"Evidently",
"Carelessly",
"Warmly",
"Stupidly",
"Daringly",
"Where",
"Unbelievably",
"Abruptly",
"Ever",
"Wholly",
"Obediently",
"Gladly",
"Otherwise",
"Strangely",
"Slyly",
"Instantly",
"Hopelessly",
"Far",
"Impulsively",
"Greatly",
"Loosely",
"Definitely",
"Solidly",
"Here",
"Out",
"Proudly",
"Coaxingly",
"Strictly",
"Darkly",
"Roughly",
"Venomously",
"Interestingly",
"Purely",
"Later",
"Even",
"Better",
"Accidentally",
"Likewise",
"Righteously",
"Besides",
"Until",
"Usually",
"Willfully",
"Doubtlessly",
"Previously",
"Totally",
"Intermittently",
"Eagerly",
"Anywhere",
"Rigidly",
"Mechanically",
"Straight",
"Inside",
"Safely",
"Regretfully",
"Hurriedly",
"Enough",
"Least",
"Surprisingly",
"Thoughtfully",
"Quarterly",
"Regrettably",
"Completely",
"Correctly",
"Fortnightly",
"Joyously",
"Marvelously",
"Outside",
"Weekly",
"Almost",
"Delicately",
"On",
"Readily",
"Seemingly",
"Basically",
"Seldom",
"Soon",
"Sometimes",
"Reluctantly",
"Upstairs",
"Ever",
"Furthermore",
"Occasionally",
"Somewhat",
"Reassuringly",
"Faithfully",
"Unfortunately",
"Diligently",
"Afterward",
"Strongly",
"Oddly",
"Urgently",
"Softly",
"Doggedly",
"Somewhere",
"Back",
"Recklessly",
"Suddenly",
"Arrogantly",
"Knowingly",
"Tomorrow",
"Mostly",
"Coolly",
"Really",
"Successfully",
"Normally",
"Monthly",
"Importantly",
"Additionally",
"Professionally",
"Outwardly",
"Apparently",
"Fully",
"Frantically",
"Right",
"Cleanly",
"Backward",
"Undoubtedly",
"Pleasingly",
"Cleverly",
"Worriedly",
"Inquisitively",
"Heavily",
"Away",
"Hourly",
"Swiftly",
"Hastily",
"Entirely",
"Dearly",
"Deeply",
"Cheaply",
"Little",
"Noisily",
"Adversely",
"Delightfully",
"Negatively",
"Unhappily",
"Similarly",
"Infrequently",
"Vastly",
"Daily",
"Promptly",
"Rudely",
"Actually",
"Rapidly",
"Next",
"Viciously",
"Sympathetically",
"Well",
"Luckily",
"Frequently",
"Honestly",
"Often",
"Under",
"Elsewhere",
"Then",
"Pretty",
"Queerly",
"More",
"Frightfully",
"Painfully",
"Below",
"Constantly",
"Towards",
"Periodically",
"In",
"Recently",
"Furiously",
"Guiltily",
"Ironically",
"Since",
"Hatefully",
"Thankfully",
"Indoors",
"Barely",
"Truly",
"Along",
"Scarcely",
"Bashfully",
"Fast",
"Anxiously",
"Sharply",
"Immediately",
"Helplessly",
"Politely",
"Yesterday",
"Nonetheless",
"Sadly",
"Kindly",
"Triumphantly",
"Quickly",
"Still",
"Nervously",
"Above",
"Enticingly",
"Near",
"Meanwhile",
"Expertly",
"Mindfully",
"Dreamily",
"Virtually",
"Annually",
"Beautifully",
"Gently",
"Exclusively",
"Passionately",
"Boldly",
]

12591
api/nick_generator/dicts/en/nouns.py Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,902 @@
adverbs = [
"Bien",
"Mal",
"Despacio",
"Deprisa",
"Como",
"Mucho",
"Poco",
"Muy",
"Casi",
"Todo",
"Nada",
"Algo",
"Medio",
"Demasiado",
"Bastante",
"Más",
"Menos",
"Además",
"Incluso",
"También",
"Mucho",
"Poco",
"Muy",
"Casi",
"Todo",
"Nada",
"Algo",
"Medio",
"Demasiado",
"Bastante",
"Más",
"Menos",
"Además",
"Incluso",
"También",
"Tampoco",
"Jamás",
"Nunca",
"Acaso",
"Quizá",
"Quizás",
"Rápidamente",
"Adrede",
"Lento",
"Bajo",
"Conforme",
"Mal",
"Bien",
"Igual",
"Mejor",
"Suavemente",
"Regular",
"Lento",
"Rápidamente",
"Fuerte",
"Velozmente",
"Apasionadamente",
"Ligero",
"Tiernamente",
"Amable",
"Claro",
"Extremadamente",
"Justo",
"Tanto",
"Demasiado",
"Mucho",
"Bastante",
"Mitad",
"Absolutamente",
"Casi",
"Tan",
"Nada",
"Solo",
"Terriblemente",
"Excesivamente",
"Apenas",
"Todo",
"Mayormente",
"Aproximadamente",
"Poco",
"Posiblemente",
"Acaso",
"Probablemente",
"Quizá",
"Seguramente",
"Aparentemente",
"Eventualmente",
"Indudablemente",
"No",
"Ni",
"Nunca",
"Jamás",
"Tampoco",
"Nadie",
"Nada",
"Ningún",
"Ninguno",
"Ninguna",
"Quién",
"Cómo",
"Cuán",
"Cuándo",
"Cuál",
"Qué",
"Quiénes",
"Cuánto",
"Cuántos",
"Abajo",
"Abaldonadamente",
"Abarrisco",
"Abastadamente",
"Abastanza",
"Abasto",
"Abatidamente",
"Abdicativamente",
"Abemoladamente",
"Abiertamente",
"Abnegadamente",
"Abominablemente",
"Abondadamente",
"Abondo",
"Abondosamente",
"Aborreciblemente",
"Abrasadamente",
"Abreviadamente",
"Absolutamente",
"Abundadamente",
"Abundantemente",
"Abundo",
"Aburridamente",
"Abés",
"Acabadamente",
"Acabdilladamente",
"Académicamente",
"Acaloradamente",
"Acatadamente",
"Accesoriamente",
"Accidentadamente",
"Accidentalmente",
"Accidentariamente",
"Acedamente",
"Aceleradamente",
"Acentuadamente",
"Aceptablemente",
"Aceptadamente",
"Aceradamente",
"Acerbamente",
"Acerca",
"Aclaratoriamente",
"Acogedoramente",
"Acomodadamente",
"Acompasadamente",
"Acordablemente",
"Acordadamente",
"Acordantemente",
"Acostumbradamente",
"Acremente",
"Acrisoladamente",
"Activamente",
"Actualmente",
"Acuciadamente",
"Acuciosamente",
"Acullá",
"Acá",
"Adagietto",
"Adagio",
"Adecuadamente",
"Adelant",
"Adelantadamente",
"Adelante",
"Adelantre",
"Además",
"Adentro",
"Adonde",
"Adrede",
"Afuera",
"Agradablemente",
"Agravantemente",
"Agraviadamente",
"Agresivamente",
"Ajoba",
"Ajustadamente",
"Alarmadamente",
"Alarmantemente",
"Alborozadamente",
"Alcalizablemente",
"Alcalizadamente",
"Alegremente",
"Alerta",
"Algo",
"Allende",
"Allá",
"Allí",
"Alocadamente",
"Alrededor",
"Altamente",
"Alternativamente",
"Altimétricamente",
"Altruistamente",
"Altruísticamente",
"Altísimamente",
"Alzadamente",
"Ambiguamente",
"Ambulatoriamente",
"Amenguadamente",
"Amigablemente",
"Amistosamente",
"Amorosamente",
"Ampliamente",
"Analíticamente",
"Analógicamente",
"Anatómicamente",
"Anchamente",
"Andante",
"Angostamente",
"Animadamente",
"Aniñadamente",
"Anoche",
"Antaño",
"Anteayer",
"Antedía",
"Antemano",
"Antemeridiano",
"Anteriormente",
"Antes",
"Anticipadamente",
"Antier",
"Antiguamente",
"Análogamente",
"Aparentemente",
"Apartadamente",
"Aparte",
"Apasionadamente",
"Apegadamente",
"Apenas",
"Aposta",
"Apostadamente",
"Aproximadamente",
"Apuestamente",
"Apuesto",
"Apuradamente",
"Aquende",
"Aquí",
"Ardorosamente",
"Armoniosamente",
"Arraigadamente",
"Arrebatadamente",
"Arregladamente",
"Arregladísimamente",
"Arriba",
"Categoría:Adverbios",
"Asaz",
"Asertivamente",
"Asimismo",
"Asmadamente",
"Astrosamente",
"Asumadamente",
"Atentamente",
"Atrasadamente",
"Atrasmano",
"Atriqui",
"Atroden",
"Atrodén",
"Atrás",
"Aun",
"Auténticamente",
"Ayuso",
"Aína",
"Aúna",
"Bacano",
"Bacán",
"Bastadamente",
"Bastante",
"Bastantemente",
"Bastantísimamente",
"Bellacamente",
"Bellamente",
"Bien",
"Bulliciosamente",
"Básicamente",
"Caballerescamente",
"Caballerosamente",
"Cachada",
"Cachá",
"Caleta",
"Calorosamente",
"Calumniosamente",
"Calurosamente",
"Cansadamente",
"Cantidad",
"Capitularmente",
"Carnalmente",
"Caro",
"Casi",
"Castigadamente",
"Categóricamente",
"Católicamente",
"Cavilosamente",
"Cañón",
"Celadamente",
"Cerca",
"Chistosamente",
"Chévere",
"Cientemente",
"Científicamente",
"Ciertamente",
"Cierto",
"Clandestinamente",
"Claramente",
"Claro",
"Clericalmente",
"Clínicamente",
"Comercialmente",
"Compaginadamente",
"Compasadamente",
"Completamente",
"Comúnmente",
"Concienzudamente",
"Confidencialmente",
"Confidentemente",
"Conforme",
"Connotativamente",
"Conscientemente",
"Considerablemente",
"Contentamente",
"Contiguamente",
"Contimás",
"Contumazmente",
"Convencionalmente",
"Convincentemente",
"Coordinadamente",
"Copiosamente",
"Correctamente",
"Corriente",
"Crecidamente",
"Creíblemente",
"Cronológicamente",
"Crudamente",
"Cruelmente",
"Cruentamente",
"Crédulamente",
"Cual",
"Cuando",
"Cuantimás",
"Cuantiosamente",
"Cuanto",
"Cuidadosamente",
"Curiosamente",
"Cuándo",
"Cínicamente",
"Cómicamente",
"Cómo",
"Daquén",
"Debajo",
"Decididamente",
"Decisivamente",
"Definitivamente",
"Delant",
"Delante",
"Delicadamente",
"Demasiadamente",
"Demasiado",
"Demás",
"Denantes",
"Denotativamente",
"Densuno",
"Dentro",
"Dependientemente",
"Deprisa",
"Depurablemente",
"Depuradamente",
"Desafortunadamente",
"Desafrancesadamente",
"Desagarradamente",
"Desagora",
"Desagradablemente",
"Desahuciadamente",
"Desaladamente",
"Desalentadamente",
"Desamparadamente",
"Desapasionadamente",
"Desapercibidamente",
"Desaseadamente",
"Descaradamente",
"Descarnadamente",
"Descaudilladamente",
"Descoordinadamente",
"Descubiertamente",
"Descuidadamente",
"Desdeñosamente",
"Desencantadamente",
"Desfavorablemente",
"Despacio",
"Despectivamente",
"Despegadamente",
"Despiertamente",
"Después",
"Desvergonzadamente",
"Detrás",
"Dichosamente",
"Didácticamente",
"Difícilmente",
"Directamente",
"Categoría:Adverbios",
"Discretamente",
"Disculpablemente",
"Disculpadamente",
"Disparadamente",
"Disparatadamente",
"Dispositivamente",
"Divinalmente",
"Divinamente",
"Doble",
"Doctamente",
"Doctoralmente",
"Doctísimamente",
"Dolientemente",
"Doliosamente",
"Donde",
"Dondequiera",
"Doquiera",
"Dorsoventralmente",
"Dramáticamente",
"Dulce",
"Durante",
"Dónde",
"Eficientemente",
"Elásticamente",
"Embarazadamente",
"Embarazosamente",
"Embrolladamente",
"Eminencialmente",
"Eminentemente",
"Emocionalmente",
"Emotivamente",
"Empeñadamente",
"Empíricamente",
"Enamoradamente",
"Enatíamente",
"Encarecidamente",
"Encargadamente",
"Encumbradamente",
"Ende",
"Endenantes",
"Enderezadamente",
"Endiabladamente",
"Endurecidamente",
"Enemigablemente",
"Enemigamente",
"Enfadosamente",
"Enfermamente",
"Enfrente",
"Enfáticamente",
"Engañosamente",
"Enigmáticamente",
"Enojadamente",
"Enojosamente",
"Enormemente",
"Enseguida",
"Enseñadamente",
"Entendidamente",
"Enteramente",
"Enternecidamente",
"Entesadamente",
"Entonce",
"Entonces",
"Entrañablemente",
"Entrañalmente",
"Entregadamente",
"Entregamientre",
"Entretanto",
"Entricadamente",
"Enérgicamente",
"Equivocadamente",
"Equívocamente",
"Erróneamente",
"Escabrosamente",
"Escandalosamente",
"Escarnecidamente",
"Escasamente",
"Escenográficamente",
"Escientemente",
"Escondidamente",
"Escuderilmente",
"Escuetamente",
"Escépticamente",
"Esencialmente",
"Esforzadamente",
"Esmeradamente",
"Especialmente",
"Esporádicamente",
"Esto",
"Estonces",
"Estrechamente",
"Estrechísimamente",
"Estrictamente",
"Estultamente",
"Estupendamente",
"Estéticamente",
"Evidentemente",
"Exactamente",
"Excepto",
"Excesivamente",
"Exclusivamente",
"Expeditamente",
"Extendidamente",
"Extensamente",
"Extensivamente",
"Extraodinariamente",
"Extraordinariamente",
"Extravagantemente",
"Extrañamente",
"Extremadamente",
"Fabuloso",
"Familiarmente",
"Fantasmagóricamente",
"Fantásticamente",
"Fatal",
"Fatalmente",
"Favorablemente",
"Favorecidamente",
"Feamente",
"Febrilmente",
"Fecundamente",
"Festivamente",
"Fieramente",
"Filatélicamente",
"Filosóficamente",
"Finalmente",
"Firme",
"Firmemente",
"Flexiblemente",
"Formalmente",
"Francamente",
"Frecuentemente",
"Freqüentemente",
"Fuera",
"Fuertemente",
"Fácilmente",
"Fóbicamente",
"Galantemente",
"Gallardamente",
"Gananciosamente",
"Ganosamente",
"Garbosamente",
"Garridamente",
"Generalmente",
"Genialmente",
"Gentilmente",
"Gloriosamente",
"Gramaticalmente",
"Grandemente",
"Gratarola",
"Gratis",
"Gravitacionalmente",
"Guardadamente",
"Gubernativamente",
"Guerreramente",
"Hartamente",
"Harto",
"Heurísticamente",
"Hogaño",
"Honestamente",
"Hábilmente",
"Ibídem",
"Idénticamente",
"Ilegalmente",
"Imbécilmente",
"Impajaritablemente",
"Importunadamente",
"Importunamente",
"Imposiblemente",
"Improbablemente",
"Incendiariamente",
"Categoría:Adverbios",
"Inclusivamente",
"Inclusive",
"Inconscientemente",
"Inconsideradamente",
"Increíblemente",
"Incruentamente",
"Indevotamente",
"Indignamente",
"Indirectamente",
"Indudablemente",
"Inevitablemente",
"Inexplicablemente",
"Infaliblemente",
"Infernalmente",
"Informadamente",
"Ingeniosamente",
"Inmediatamente",
"Inmensamente",
"Inopinadamente",
"Insistentemente",
"Inspeccionadamente",
"Intensamente",
"Intensivamente",
"Interesadamente",
"Intrincadamente",
"Intrépidamente",
"Invariablemente",
"Invisiblemente",
"Invitadamente",
"Invocadamente",
"Involuntariamente",
"Inútilmente",
"Irregularmente",
"Irrespetuosamente",
"Jovialmente",
"Juntamente",
"Junto",
"Justiniano",
"Justo",
"Lamentablemente",
"Lascivamente",
"Lastimeramente",
"Lastimosamente",
"Lealmente",
"Legato",
"Lentamente",
"Lento",
"Lexicalmente",
"Lexicográficamente",
"Lexicológicamente",
"Libertadamente",
"Ligeramente",
"Lingüísticamente",
"Listamente",
"Llenamente",
"Localmente",
"Lujosamente",
"Léxicamente",
"Líberamente",
"Líricamente",
"Majestuosamente",
"Malavez",
"Malavés",
"Maldecidamente",
"Maldicientemente",
"Malditamente",
"Mansamente",
"Mansito",
"Maravillosamente",
"Marrulleramente",
"Matacaballo",
"Materialmente",
"Mayormente",
"Mayormientre",
"Mañana",
"Meditativamente",
"Mejor",
"Menos",
"Merecidamente",
"Mezcladamente",
"Mientra",
"Mientras",
"Mientre",
"Ministerialmente",
"Minuciosamente",
"Mismo",
"Mitad",
"Mogollón",
"Molestamente",
"Monstruosamente",
"Monótonamente",
"Mucho",
"Muchísimo",
"Muellemente",
"Mutualmente",
"Mutuamente",
"Muy",
"Más",
"Nacionalmente",
"Nada",
"Natural",
"Negativamente",
"Nerviosamente",
"Normalmente",
"Novelísticamente",
"Nuevamente",
"Nunca",
"Obligatoriamente",
"Obstinadamente",
"Obviamente",
"Ocasionalmente",
"Oficialmente",
"Ogaño",
"Oralmente",
"Organizadamente",
"Ostensiblemente",
"Pan-",
"Papalmente",
"Paremiológicamente",
"Partidamente",
"Pasaderamente",
"Paulatinamente",
"Pedagógicamente",
"Peor",
"Pequeñamente",
"Perdidamente",
"Perfectamente",
"Perfectiblemente",
"Perfecto",
"Perfetamente",
"Permisivamente",
"Pero",
"Personalmente",
"Persuasivamente",
"Persécula",
"Petulantemente",
"Piano",
"Picantemente",
"Picarescamente",
"Poco",
"Posiblemente",
"Posmeridiano",
"Posta",
"Potencialmente",
"Poéticamente",
"Precipitosamente",
"Precipuamente",
"Precisamente",
"Preocupadamente",
"Prestamente",
"Primero",
"Principalmente",
"Privado",
"Probablemente",
"Profundamente",
"Prontamente",
"Prontísimamente",
"Provechosamente",
"Prudentemente",
"Prácticamente",
"Pues",
"Puntualmente",
"Pérfidamente",
"Pésimamente",
"Pícaramente",
"Públicamente",
"Quedamente",
"Quedito",
"Quietamente",
"Quizá",
"Quizás",
"Rateramente",
"Razonadamente",
"Realmente",
"Rechazadamente",
"Reciamente",
"Recientemente",
"Recio",
"Recién",
"Recuperadamente",
"Redro",
"Reflexivamente",
"Regresivamente",
"Reiteradamente",
"Relajadamente",
"Religiosamente",
"Remilgadamente",
"Repente",
"Repentinamente",
"Repeor",
"Repetidamente",
"Reportadamente",
"Reposadamente",
"Reservadamente",
"Resolutamente",
"Resolutivamente",
"Resueltamente",
"Retenidamente",
"Retóricamente",
"Revocablemente",
"Rigorosamente",
"Rigurosamente",
"Ritualmente",
"Rotundamente",
"Rápidamente",
"Rápido",
"Sacrosantamente",
"Saludablemente",
"Salutíferamente",
"Salvajemente",
"Salvamente",
"Salvante",
"Salvo",
"Satisfactoriamente",
"Secularmente",
"Secundariamente",
"Secundo",
"Sedativamente",
"Seguidamente",
"Seguramente",
"Seguro",
"Según",
"Sensatamente",
"Sentado",
"Separadamente",
"Seriamente",
"Severamente",
"Severely",
"Señaladamente",
"Señorilmente",
"Sic",
"Sicológicamente",
"Siempre",
"Sigilosamente",
"Significantemente",
"Significativamente",
"Simbólicamente",
"Simplemente",
"Soberbiamente",
"Sobrado",
"Sobrenaturalmente",
"Socorridamente",
"Solamente",
"Solo",
"Sosegadamente",
"Sospechosamente",
"Suave",
"Suavemente",
"Subitáneamente",
"Suficientemente",
"Suficientísimamente",
"Sumamente",
"Superabundantemente",
"Superbamente",
"Supereminentemente",
"Supersticiosamente",
"Supuestamente",
"Sutilmente",
"Sólo",
"Súper",
"Tacataca",
"Talvez",
"Tampoco",
"Tangiblemente",
"Tanto",
"Tarde",
"Temporalmente",
"Tempranamente",
"Temprano",
"Tentativamente",
"Tercamente",
"Terriblemente",
"Tiranamente",
"Tiranizadamente",
"Tiránicamente",
"Todavía",
"Tolerablemente",
"Topográficamente",
"Torcidamente",
"Toscamente",
"Total",
"Totalmente",
"Tradicionalmente",
"Trasca",
"Trascartón",
"Triangularmente",
"Trimestralmente",
"Triunfalmente",
"Triunfantemente",
"Truncadamente",
"Tumultuosamente",
"Turísticamente",
"Tímidamente",
"Ulteriormente",
"Ultimadamente",
"Unidamente",
"Uniformemente",
"Unilateralmente",
"Unipersonalmente",
"Usualmente",
"Valientemente",
"Velozmente",
"Veramente",
"Verazmente",
"Verbigracia",
"Verdaderamente",
"Viceversa",
"Vilmente",
"Violentamente",
"Virtuosamente",
"Visiblemente",
"Vistosamente",
"Visualmente",
"Vivamente",
"Vivazmente",
"Volando",
"Vulgo",
"Yuso",
"Zafiamente",
"Zarrapastrosamente",
"Zonzamente",
"Ágilmente",
"Ásperamente",
"Épicamente",
"Éticamente",
]

58804
api/nick_generator/dicts/es/nouns.py Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,223 @@
from .utils import human_format
import hashlib
import time
"""
Deterministic nick generator from SHA256 hash.
It builds Nicknames as:
Adverb + Adjective + Noun + Numeric(0-999)
With the current English dictionaries there
is a total of to 450*4800*12500*1000 =
28 Trillion deterministic nicks
"""
class NickGenerator:
def __init__(
self,
lang="English",
use_adv=True,
use_adj=True,
use_noun=True,
max_num=999,
verbose=False,
):
"""
used_adv: bool , True if adverbs are used in the nick.
used_adj: bool , True if adjectives are used in the nick.
use_noun: bool , True if nouns are used in the nick.
max_num: int, max integer to be used in nick (at least 1)
"""
if lang == "English":
from .dicts.en.adverbs import adverbs
from .dicts.en.adjectives import adjectives
from .dicts.en.nouns import nouns
elif lang == "Spanish":
from .dicts.es.adverbs import adverbs
from .dicts.es.adjectives import adjectives
from .dicts.es.nouns import nouns
else:
raise ValueError("Language not implemented.")
print(
f"{lang} SHA256 Nick Generator initialized with:"
+ f"\nUp to {len(adverbs)} adverbs."
+ f"\nUp to {len(adjectives)} adjectives."
+ f"\nUp to {len(nouns)} nouns."
+ f"\nUp to {max_num+1} numerics.\n"
)
self.use_adv = use_adv
self.use_adj = use_adj
self.use_noun = use_noun
self.max_num = max_num
self.verbose = verbose
self.adverbs = adverbs
self.adjectives = adjectives
self.nouns = nouns
def from_SHA256(self, hash=None):
"""
Converts hash to int, min-max scales it
to the pool size of nicks, uses it as
index to construct the nick element by
element.
hash; SHA256 hash as bytes
"""
# Get size of dictionaries for each element
num_adv = len(self.adverbs) if self.use_adv else 1
num_adj = len(self.adjectives) if self.use_adj else 1
num_nouns = len(self.nouns) if self.use_noun else 1
# Compute pool size by combinatorics
pool_size = self.max_num * num_nouns * num_adj * num_adv
# Min-Max scale the hash relative to the pool size
max_int_hash = 2 ** 256
int_hash = int(hash, 16)
nick_id = int((int_hash / max_int_hash) * pool_size)
# Compute adverb id
if self.use_adv:
adv_id = int(nick_id / (self.max_num * num_nouns * num_adj))
adv = self.adverbs[adv_id]
remainder = nick_id - adv_id * self.max_num * num_nouns * num_adj
if self.verbose:
print(f"Adverb: {adv}, id {adv_id}.")
else:
adv_id, adv, remainder = 0, "", nick_id
# Compute adjective id
if self.use_adj:
adj_id = int(remainder / (self.max_num * num_nouns))
adj = self.adjectives[adj_id]
remainder = remainder - adj_id * self.max_num * num_nouns
if self.verbose:
print(f"Adjective: {adj}, id {adj_id}.")
else:
adj_id, adj = 0, ""
# Compute noun id
if self.use_noun:
noun_id = int(remainder / self.max_num)
noun = self.nouns[noun_id]
if self.verbose:
print(f"Noun: {noun}, id {noun_id}.\n")
else:
noun_id, noun = 0, ""
# Remainder is the numeric element
if self.max_num > 0:
num_id = remainder - noun_id * self.max_num
number = str(num_id)
else:
num_id, number = 0, ""
# Build nick
nick = adv + adj + noun + number
return nick, nick_id, pool_size
def short_from_SHA256(
self,
primer_hash=None,
max_length=25,
max_iter=10000,
):
"""
Generates Nicks that are short.
Iterates trough hashes deterministically
until it finds a nick that satisfies
the lenght restriction.
"""
hash = primer_hash
i = 0
while i < max_iter:
nick, nick_id, pool_size = self.from_SHA256(hash)
if len(nick) <= max_length:
return nick, nick_id, pool_size, i
else:
string = str(hash) + str(42)
hash = hashlib.sha256(str.encode(string)).hexdigest()
i = i + 1
return "", 0, 0, i
def compute_pool_size_loss(self, max_length=22, max_iter=1000000, num_runs=5000):
"""
Computes median an average loss of
nick pool diversity due to max_lenght
restrictions.
"""
import random
import statistics
attempts = []
for i in range(num_runs):
string = str(random.uniform(0, 1000000))
hash = hashlib.sha256(str.encode(string)).hexdigest()
_, _, pool_size, tries = self.short_from_SHA256(hash, max_length)
attempts.append(tries)
median = statistics.median(attempts)
mean = statistics.mean(attempts)
print(f"\nFor max_length of {max_length}:")
print(f"Median loss of entropy factor is {median}.")
print(f"Mean loss of entropy factor is {mean}.")
print(
f"Approximate real pool is {human_format( int(pool_size/(mean+1)))} nicks in size."
)
if __name__ == "__main__":
# Just for code timming
t0 = time.time()
# Hardcoded example text and hashing
nick_lang = 'English' #Spanish
hash = hashlib.sha256(b"No one expected such cool nick!!").hexdigest()
max_length = 22
max_iter = 100000000
# Initialized nick generator
GenNick = NickGenerator(lang=nick_lang)
# Generates a short nick with length limit from SHA256
nick, nick_id, pool_size, iterations = GenNick.short_from_SHA256(
hash, max_length, max_iter
)
# Output
print(
f"Nick number {nick_id} has been selected among"
+ f" {human_format(pool_size)} possible nicks.\n"
+ f"Needed {iterations} iterations to find one "
+ f"this short.\nYour nick is {nick} !\n"
)
print(f"Nick lenght is {len(nick)} characters.")
print(f"Nick landed at height {nick_id/(pool_size+1)} on the pool.")
print(f"Took {time.time()-t0} secs.\n")
# Print many nicks
import random
random.seed(1)
for i in range(100):
string = str(random.uniform(0, 1000000))
hash = hashlib.sha256(str.encode(string)).hexdigest()
print(
GenNick.short_from_SHA256(hash, max_length=max_length, max_iter=max_iter)[0]
)
# Other analysis
GenNick.compute_pool_size_loss(max_length, max_iter, 200)

7
api/nick_generator/utils.py Executable file
View File

@ -0,0 +1,7 @@
from math import log, floor
def human_format(number):
units = ["", " Thousand", " Million", " Billion", " Trillion", " Quatrillion"]
k = 1000.0
magnitude = int(floor(log(number, k)))
return "%.2f%s" % (number / k ** magnitude, units[magnitude])

View File

@ -1,7 +1,8 @@
from django.urls import path
from .views import MakeOrder, OrderView
from .views import MakeOrder, OrderView, UserGenerator
urlpatterns = [
path('make/', MakeOrder.as_view()),
path('order/', OrderView.as_view()),
path('usergen/', UserGenerator.as_view()),
]

View File

@ -1,12 +1,22 @@
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from .serializers import OrderSerializer, MakeOrderSerializer
from .models import Order
from .nick_generator.nick_generator import NickGenerator
from robohash import Robohash
from scipy.stats import entropy
from math import log2
import numpy as np
import hashlib
from pathlib import Path
from datetime import timedelta
from django.utils import timezone
# Create your views here.
class MakeOrder(APIView):
@ -23,9 +33,15 @@ class MakeOrder(APIView):
premium = serializer.data.get('premium')
satoshis = serializer.data.get('satoshis')
#################
# TODO
user = User.objects.get(id=request.user.id)
# query if the user is already a maker or taker, return error
queryset = Order.objects.filter(maker=request.user.id)
if queryset.exists():
return Response({'Bad Request':'You are already maker of an order'},status=status.HTTP_400_BAD_REQUEST)
queryset = Order.objects.filter(taker=request.user.id)
if queryset.exists():
return Response({'Bad Request':'You are already taker of an order'},status=status.HTTP_400_BAD_REQUEST)
# Creates a new order in db
order = Order(
@ -34,7 +50,8 @@ class MakeOrder(APIView):
amount=amount,
payment_method=payment_method,
premium=premium,
satoshis=satoshis)
satoshis=satoshis,
maker=user)
order.save()
if not serializer.is_valid():
@ -58,24 +75,107 @@ class OrderView(APIView):
print("It is only one!")
order = order[0]
data = self.serializer_class(order).data
# TODO
# # Check if requester is participant in the order and add boolean to response
# user = authenticate(username=username, password=password)
# data['is_participant'] = any(user.id == order.maker, user.id == order.taker)
nickname = request.user.username
# if data['is_participant']:
# return Response(data, status=status.HTTP_200_OK)
# else:
# # Non participants can't get access to the status or who is the taker
# data.pop(['status'],['taker'])
# return Response(data, status=status.HTTP_200_OK)
# Check if requester is participant in the order and add boolean to response
data['is_participant'] = (str(order.maker) == nickname or str(order.taker) == nickname)
return Response(data, status=status.HTTP_200_OK)
if data['is_participant']:
return Response(data, status=status.HTTP_200_OK)
else:
# Non participants should not see the status or who is the taker
data.pop('status','taker')
return Response(data, status=status.HTTP_200_OK)
return Response({'Order Not Found':'Invalid Order Id'},status=status.HTTP_404_NOT_FOUND)
return Response({'Bad Request':'Order ID parameter not found in request'}, status=status.HTTP_400_BAD_REQUEST)
class UserGenerator(APIView):
lookup_url_kwarg = 'token'
NickGen = NickGenerator(
lang='English',
use_adv=False,
use_adj=True,
use_noun=True,
max_num=999)
def get(self,request):
'''
Get a new user derived from a high entropy token
- Request has a high-entropy token,
- Generates new nickname and avatar.
- Creates login credentials (new User object)
Response with Avatar and Nickname.
'''
token = request.GET.get(self.lookup_url_kwarg)
# Compute token entropy
value, counts = np.unique(list(token), return_counts=True)
shannon_entropy = entropy(counts, base=62)
bits_entropy = log2(len(value)**len(token))
# Start preparing payload
context = {'token_shannon_entropy': shannon_entropy, 'token_bits_entropy': bits_entropy}
# Deny user gen if entropy below 128 bits or 0.7 shannon heterogeneity
if bits_entropy < 128 or shannon_entropy < 0.7:
context['bad_request'] = 'The token does not have enough entropy'
return Response(context, status=status.HTTP_400_BAD_REQUEST)
# Hashes the token, only 1 iteration. Maybe more is better.
hash = hashlib.sha256(str.encode(token)).hexdigest()
# generate nickname
nickname = self.NickGen.short_from_SHA256(hash, max_length=18)[0]
context['nickname'] = nickname
# generate avatar
rh = Robohash(hash)
rh.assemble(roboset='set1') # bgset='any' for backgrounds ON
avatars_path = Path('frontend/static/assets/avatars')
avatars_path.mkdir(parents=True, exist_ok=True)
with open(avatars_path.joinpath(nickname+".png"), "wb") as f:
rh.img.save(f, format="png")
# Create new credentials if nickname is new
if len(User.objects.filter(username=nickname)) == 0:
User.objects.create_user(username=nickname, password=token, is_staff=False)
user = authenticate(request, username=nickname, password=token)
login(request, user)
return Response(context, status=status.HTTP_201_CREATED)
else:
user = authenticate(request, username=nickname, password=token)
if user is not None:
login(request, user)
# Sends the welcome back message, only if created +30 mins ago
if request.user.date_joined < (timezone.now()-timedelta(minutes=1)):
context['found'] = 'We found your Robosat. Welcome back!'
return Response(context, status=status.HTTP_202_ACCEPTED)
else:
# It is unlikely (1/20 Billions) but maybe the nickname is taken
context['found'] = 'Bad luck, this nickname is taken'
context['bad_request'] = 'Enter a different token'
return Response(context, status=status.HTTP_403_FORBIDDEN)
def delete(self,request):
user = User.objects.get(id = request.user.id)
# TO DO. Pressing give me another will delete the logged in user
# However it might be a long time recovered user
# Only delete if user live is < 5 minutes
if user is not None:
logout(request)
user.delete()
return Response(status=status.HTTP_301_MOVED_PERMANENTLY)
return Response(status=status.HTTP_403_FORBIDDEN)

View File

@ -2303,6 +2303,14 @@
"semver": "^6.0.0"
}
},
"material-ui-image": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/material-ui-image/-/material-ui-image-3.3.2.tgz",
"integrity": "sha512-WE5QE0Rjdx9jPKuI0LWI7s8VQ9cifPIXObu8AUCRcidXGV3NqPI9C8c9A/C0MofKpkZ3buG8+IT9N7GgSmxXeg==",
"requires": {
"prop-types": "^15.5.8"
}
},
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",

View File

@ -24,6 +24,7 @@
"@babel/plugin-proposal-class-properties": "^7.16.7",
"@material-ui/core": "^4.12.3",
"@material-ui/icons": "^4.11.2",
"material-ui-image": "^3.3.2",
"react-router-dom": "^5.2.0"
}
}

View File

@ -10,7 +10,7 @@ export default class App extends Component {
render() {
return (
<div>
<div className='appCenter'>
<HomePage />
</div>
);

View File

@ -1,7 +1,7 @@
import React, { Component } from "react";
import { BrowserRouter as Router, Switch, Route, Link, Redirect } from "react-router-dom";
import NickGenPage from "./NickGenPage";
import UserGenPage from "./UserGenPage";
import LoginPage from "./LoginPage.js";
import MakerPage from "./MakerPage";
import BookPage from "./BookPage";
@ -17,7 +17,7 @@ export default class HomePage extends Component {
return (
<Router >
<Switch>
<Route exact path='/' component={NickGenPage}/>
<Route exact path='/' component={UserGenPage}/>
<Route path='/home'><p>You are at the start page</p></Route>
<Route path='/login'component={LoginPage}/>
<Route path='/make' component={MakerPage}/>

View File

@ -1,11 +0,0 @@
import React, { Component } from "react";
export default class NickGenPage extends Component {
constructor(props) {
super(props);
}
render() {
return <p>This is the landing and user generator page</p>;
}
}

View File

@ -0,0 +1,139 @@
import React, { Component } from "react";
import { Button , Grid, Typography, TextField, Select, FormHelperText, MenuItem, FormControl, Radio, FormControlLabel, RadioGroup, Menu} from "@material-ui/core"
import { Link } from 'react-router-dom'
import Image from 'material-ui-image'
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
const csrftoken = getCookie('csrftoken');
export default class UserGenPage extends Component {
constructor(props) {
super(props);
this.state = {
token: this.genBase62Token(32),
};
this.getGeneratedUser();
}
// sort of cryptographically strong function to generate Base62 token client-side
genBase62Token(length)
{
return window.btoa(Array.from(
window.crypto.getRandomValues(
new Uint8Array(length * 2)))
.map((b) => String.fromCharCode(b))
.join("")).replace(/[+/]/g, "")
.substring(0, length);
}
getGeneratedUser() {
fetch('/api/usergen' + '?token=' + this.state.token)
.then((response) => response.json())
.then((data) => {
this.setState({
nickname: data.nickname,
bit_entropy: data.token_bits_entropy,
avatar_url: 'static/assets/avatars/' + data.nickname + '.png',
shannon_entropy: data.token_shannon_entropy,
bad_request: data.bad_request,
found: data.found,
});
});
}
delGeneratedUser() {
const requestOptions = {
method: 'DELETE',
headers: {'Content-Type':'application/json', 'X-CSRFToken': csrftoken},
};
fetch("/api/usergen", requestOptions)
.then((response) => response.json())
.then((data) => console.log(data));
}
// Fix next two handler functions so they work sequentially
// at the moment they make the request generate a new user in parallel
// to updating the token in the state. So the it works a bit weird.
handleAnotherButtonPressed=(e)=>{
this.delGeneratedUser()
this.setState({
token: this.genBase62Token(32),
})
this.getGeneratedUser();
}
handleChangeToken=(e)=>{
this.delGeneratedUser()
this.setState({
token: e.target.value,
})
this.getGeneratedUser();
}
render() {
return (
<Grid container spacing={1}>
<Grid item xs={12} align="center">
<TextField
error={this.state.bad_request}
label='Token - Store safely'
required='true'
value={this.state.token}
variant='standard'
helperText={this.state.bad_request}
size='small'
// multiline = {true}
onChange={this.handleChangeToken}
/>
</Grid>
<Grid item xs={12} align="center">
<div style={{ maxWidth: 200, maxHeight: 200 }}>
<Image className='newAvatar'
disableError='true'
cover='true'
color='null'
src={this.state.avatar_url}
/>
</div>
</Grid>
<Grid item xs={12} align="center">
<Typography component="h5" variant="h5">
<b>{this.state.nickname ? "⚡"+this.state.nickname+"⚡" : ""}</b>
</Typography>
</Grid>
{
this.state.found ?
<Grid item xs={12} align="center">
<Typography component="subtitle2" variant="subtitle2" color='primary'>
{this.state.found}<br/>
</Typography>
<Button variant='contained' color='primary' to='/home' component={Link}>Cool!</Button>
</Grid>
:
<Grid item xs={12} align="center">
<Button variant='contained' color='primary' to='/home' component={Link}>Take This Robosat!</Button>
</Grid>
}
<Grid item xs={12} align="center">
<Button variant='contained' to='/' component={Link} onClick={this.handleAnotherButtonPressed}>Give Me Another</Button>
</Grid>
</Grid>
);
}
}

View File

@ -0,0 +1,15 @@
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}

View File

@ -16,5 +16,20 @@ body {
#app {
width: 100%;
height: 100%;
display: flex;
}
.appCenter {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
.newAvatar {
background-color:white;
border-radius: 50%;
border: 2px solid #555;
filter: drop-shadow(1px 1px 1px #000000);
height: 200px;
width: 200px;
}

File diff suppressed because one or more lines are too long

View File

@ -1,727 +0,0 @@
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/*!*******************************!*\
!*** ./src/components/App.js ***!
\*******************************/
/*!************************************!*\
!*** ./src/components/BookPage.js ***!
\************************************/
/*!************************************!*\
!*** ./src/components/HomePage.js ***!
\************************************/
/*!*************************************!*\
!*** ./node_modules/react/index.js ***!
\*************************************/
/*!*************************************!*\
!*** ./src/components/LoginPage.js ***!
\*************************************/
/*!*************************************!*\
!*** ./src/components/MakerPage.js ***!
\*************************************/
/*!*************************************!*\
!*** ./src/components/OrderPage.js ***!
\*************************************/
/*!***************************************!*\
!*** ./node_modules/isarray/index.js ***!
\***************************************/
/*!***************************************!*\
!*** ./src/components/NickGenPage.js ***!
\***************************************/
/*!****************************************!*\
!*** ./node_modules/react-is/index.js ***!
\****************************************/
/*!*****************************************!*\
!*** ./node_modules/react-dom/index.js ***!
\*****************************************/
/*!*****************************************!*\
!*** ./node_modules/scheduler/index.js ***!
\*****************************************/
/*!******************************************!*\
!*** ./node_modules/clsx/dist/clsx.m.js ***!
\******************************************/
/*!******************************************!*\
!*** ./node_modules/jss/dist/jss.esm.js ***!
\******************************************/
/*!******************************************!*\
!*** ./node_modules/prop-types/index.js ***!
\******************************************/
/*!*******************************************!*\
!*** ./src/components/WaitingRoomPage.js ***!
\*******************************************/
/*!*********************************************!*\
!*** ./node_modules/history/esm/history.js ***!
\*********************************************/
/*!*********************************************!*\
!*** ./node_modules/object-assign/index.js ***!
\*********************************************/
/*!**********************************************!*\
!*** ./node_modules/path-to-regexp/index.js ***!
\**********************************************/
/*!***************************************************!*\
!*** ./node_modules/is-in-browser/dist/module.js ***!
\***************************************************/
/*!****************************************************!*\
!*** ./node_modules/hyphenate-style-name/index.js ***!
\****************************************************/
/*!*****************************************************!*\
!*** ./node_modules/value-equal/esm/value-equal.js ***!
\*****************************************************/
/*!*******************************************************!*\
!*** ./node_modules/@material-ui/system/esm/merge.js ***!
\*******************************************************/
/*!*******************************************************!*\
!*** ./node_modules/react-router/esm/react-router.js ***!
\*******************************************************/
/*!********************************************************!*\
!*** ./node_modules/css-vendor/dist/css-vendor.esm.js ***!
\********************************************************/
/*!********************************************************!*\
!*** ./node_modules/react/cjs/react.production.min.js ***!
\********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Grid/Grid.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Grow/Grow.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/List/List.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Menu/Menu.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/system/esm/memoize.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/system/esm/spacing.js ***!
\*********************************************************/
/*!**********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/red.js ***!
\**********************************************************/
/*!**********************************************************!*\
!*** ./node_modules/@material-ui/utils/esm/deepmerge.js ***!
\**********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Input/Input.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Modal/Modal.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Paper/Paper.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Radio/Radio.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/blue.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/grey.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/pink.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/react-transition-group/esm/config.js ***!
\***********************************************************/
/*!************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/green.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/shape.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/setRef.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/tiny-warning/dist/tiny-warning.esm.js ***!
\************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Button/Button.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Portal/Portal.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Select/Select.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/common.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/indigo.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/orange.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/zIndex.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/system/esm/breakpoints.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/prop-types/factoryWithThrowingShims.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
\*************************************************************/
/*!**************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/shadows.js ***!
\**************************************************************/
/*!**************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/debounce.js ***!
\**************************************************************/
/*!**************************************************************!*\
!*** ./node_modules/react-is/cjs/react-is.production.min.js ***!
\**************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/InputBase/utils.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Popover/Popover.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/useTheme.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/react-router-dom/esm/react-router-dom.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/react-transition-group/esm/Transition.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/resolve-pathname/esm/resolve-pathname.js ***!
\***************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/List/ListContext.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/capitalize.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useForkRef.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/react-dom/cjs/react-dom.production.min.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/scheduler/cjs/scheduler.production.min.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/tiny-invariant/dist/tiny-invariant.esm.js ***!
\****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ButtonBase/Ripple.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ListItem/ListItem.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/MenuItem/MenuItem.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/MenuList/MenuList.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/withStyles.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/transitions/utils.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/ownerWindow.js ***!
\*****************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Modal/ModalManager.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Select/SelectInput.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createTheme.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/transitions.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/isMuiElement.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/mini-create-react-context/dist/esm/index.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/react-router/node_modules/react-is/index.js ***!
\******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormGroup/FormGroup.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormLabel/FormLabel.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/InputBase/InputBase.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/TextField/TextField.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/SwitchBase.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createMixins.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/defaultTheme.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/createSvgIcon.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/ownerDocument.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useControlled.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/useTheme/useTheme.js ***!
\*******************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createPalette.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createSpacing.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/unstable_useId.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/react-transition-group/esm/TransitionGroup.js ***!
\********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/IconButton/IconButton.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/InputLabel/InputLabel.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Radio/RadioButtonIcon.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/RadioGroup/RadioGroup.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Typography/Typography.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js ***!
\*********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/getScrollbarSize.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useEventCallback.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/ThemeProvider/nested.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js ***!
\**********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FilledInput/FilledInput.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/FormControl.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/colorManipulator.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createTypography.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/withStyles/withStyles.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/react-transition-group/esm/utils/ChildMapping.js ***!
\***********************************************************************/
/*!************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/RadioGroup/useRadioGroup.js ***!
\************************************************************************/
/*!************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createBreakpoints.js ***!
\************************************************************************/
/*!*************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
\*************************************************************************/
/*!*************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js ***!
\*************************************************************************/
/*!*************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js ***!
\*************************************************************************/
/*!**************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
\**************************************************************************/
/*!**************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/useFormControl.js ***!
\**************************************************************************/
/*!**************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js ***!
\**************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js ***!
\***************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/createChainedFunction.js ***!
\***************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js ***!
\***************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/react-transition-group/esm/TransitionGroupContext.js ***!
\***************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/formControlState.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/RadioGroup/RadioGroupContext.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js ***!
\****************************************************************************/
/*!*****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js ***!
\*****************************************************************************/
/*!*****************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js ***!
\*****************************************************************************/
/*!*****************************************************************************!*\
!*** ./node_modules/hoist-non-react-statics/node_modules/react-is/index.js ***!
\*****************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/FormControlContext.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js ***!
\******************************************************************************/
/*!*******************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
\*******************************************************************************/
/*!*******************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js ***!
\*******************************************************************************/
/*!********************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js ***!
\********************************************************************************/
/*!*********************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
\*********************************************************************************/
/*!*********************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js ***!
\*********************************************************************************/
/*!*********************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js ***!
\*********************************************************************************/
/*!**********************************************************************************!*\
!*** ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***!
\**********************************************************************************/
/*!**********************************************************************************!*\
!*** ./node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js ***!
\**********************************************************************************/
/*!***********************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js ***!
\***********************************************************************************/
/*!*************************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js ***!
\*************************************************************************************/
/*!*************************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/svg-icons/RadioButtonChecked.js ***!
\*************************************************************************************/
/*!***************************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/svg-icons/RadioButtonUnchecked.js ***!
\***************************************************************************************/
/*!****************************************************************************************!*\
!*** ./node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js ***!
\****************************************************************************************/
/*!****************************************************************************************!*\
!*** ./node_modules/react-router/node_modules/react-is/cjs/react-is.production.min.js ***!
\****************************************************************************************/
/*!************************************************************************************************!*\
!*** ./node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js ***!
\************************************************************************************************/
/*!*************************************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js ***!
\*************************************************************************************************/
/*!***************************************************************************************************!*\
!*** ./node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js ***!
\***************************************************************************************************/

View File

@ -38,6 +38,11 @@ python3 manage.py migrate
python3 manage.py runserver
```
### Install python dependencies
```
pip install robohash
```
## React development environment
### Install npm
`sudo apt install npm`
@ -53,6 +58,7 @@ npm install @material-ui/core
npm install @babel/plugin-proposal-class-properties
npm install react-router-dom@5.2.0
npm install @material-ui/icons
npm install material-ui-image
```
### Launch the React render