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 # Django
*migrations* *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 django.urls import path
from .views import MakeOrder, OrderView from .views import MakeOrder, OrderView, UserGenerator
urlpatterns = [ urlpatterns = [
path('make/', MakeOrder.as_view()), path('make/', MakeOrder.as_view()),
path('order/', OrderView.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 import status
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.response import Response from rest_framework.response import Response
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User from django.contrib.auth.models import User
from .serializers import OrderSerializer, MakeOrderSerializer from .serializers import OrderSerializer, MakeOrderSerializer
from .models import Order 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. # Create your views here.
class MakeOrder(APIView): class MakeOrder(APIView):
@ -23,9 +33,15 @@ class MakeOrder(APIView):
premium = serializer.data.get('premium') premium = serializer.data.get('premium')
satoshis = serializer.data.get('satoshis') satoshis = serializer.data.get('satoshis')
################# user = User.objects.get(id=request.user.id)
# TODO
# query if the user is already a maker or taker, return error # 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 # Creates a new order in db
order = Order( order = Order(
@ -34,7 +50,8 @@ class MakeOrder(APIView):
amount=amount, amount=amount,
payment_method=payment_method, payment_method=payment_method,
premium=premium, premium=premium,
satoshis=satoshis) satoshis=satoshis,
maker=user)
order.save() order.save()
if not serializer.is_valid(): if not serializer.is_valid():
@ -58,24 +75,107 @@ class OrderView(APIView):
print("It is only one!") print("It is only one!")
order = order[0] order = order[0]
data = self.serializer_class(order).data data = self.serializer_class(order).data
nickname = request.user.username
# 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)
# if data['is_participant']: # Check if requester is participant in the order and add boolean to response
# return Response(data, status=status.HTTP_200_OK) data['is_participant'] = (str(order.maker) == nickname or str(order.taker) == nickname)
# 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)
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({'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) 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" "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": { "merge-stream": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "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", "@babel/plugin-proposal-class-properties": "^7.16.7",
"@material-ui/core": "^4.12.3", "@material-ui/core": "^4.12.3",
"@material-ui/icons": "^4.11.2", "@material-ui/icons": "^4.11.2",
"material-ui-image": "^3.3.2",
"react-router-dom": "^5.2.0" "react-router-dom": "^5.2.0"
} }
} }

View File

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

View File

@ -1,7 +1,7 @@
import React, { Component } from "react"; import React, { Component } from "react";
import { BrowserRouter as Router, Switch, Route, Link, Redirect } from "react-router-dom"; 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 LoginPage from "./LoginPage.js";
import MakerPage from "./MakerPage"; import MakerPage from "./MakerPage";
import BookPage from "./BookPage"; import BookPage from "./BookPage";
@ -17,7 +17,7 @@ export default class HomePage extends Component {
return ( return (
<Router > <Router >
<Switch> <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='/home'><p>You are at the start page</p></Route>
<Route path='/login'component={LoginPage}/> <Route path='/login'component={LoginPage}/>
<Route path='/make' component={MakerPage}/> <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 { #app {
width: 100%; width: 100%;
height: 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 python3 manage.py runserver
``` ```
### Install python dependencies
```
pip install robohash
```
## React development environment ## React development environment
### Install npm ### Install npm
`sudo apt install npm` `sudo apt install npm`
@ -53,6 +58,7 @@ npm install @material-ui/core
npm install @babel/plugin-proposal-class-properties npm install @babel/plugin-proposal-class-properties
npm install react-router-dom@5.2.0 npm install react-router-dom@5.2.0
npm install @material-ui/icons npm install @material-ui/icons
npm install material-ui-image
``` ```
### Launch the React render ### Launch the React render