feat: add Firebase configuration for OpenApply SPA and validate required variables

This commit is contained in:
Nathan 2026-04-17 20:53:19 -04:00
parent 0634d6884c
commit d2985e9c54
6 changed files with 122 additions and 47 deletions

View File

@ -1,48 +1,69 @@
$ANSIBLE_VAULT;1.1;AES256 $ANSIBLE_VAULT;1.1;AES256
35313963633335346336316139656531613164666132623362393137333034303438643063613861 35323061323763313630376438346339613532396437616537636466383462636261343761356563
3964373430656434376362396361633338363363326565640a306365353965643433643333316438 3439383639353636383232663533313433366366376535610a313433666263383838616334353337
39653236656561303033343766663865616434656631666439626238616330386132663939353962 36373161613833613565303131646266663030633133623066653935373836393766363633613334
3339393130396634300a613065306536643133353837646666366565303466633963386533323732 6439633034613765360a633132346339363966303034313465616435333366343765373735396265
30626338336562666333323332616533666634323833333563333938666132313163393462336236 63376331656230666636623964623565386261636237613565313664336130313931363835313339
35656161623036333639626565646463366533613633663031643363353035303165383465656230 61653361303435653931373165656266396638376163646661633235366633663730623131636361
34616662633262636630346438356261656234623965616330356639383166623533386439366336 31376339373836343935356133336530376264646464323163313366356431353734386432393837
62363665313265383761376636653432343234663363303630656630643432623730343264633638 32336163343264633363646135373863623537613738326232376265363665346136306530313762
62646461313937646365656631363162653737626265386561383937656437663637306263613363 64393562666236376533643336383062626131646561313261653535323232326430393833386637
33616363666435323733356430323632373762626364396131393366646330373834656263363463 35663037336265363436646638366338663332363937333534383661393337313633343063666332
66343961623438623239383437306364663362396238346465623630373939633830333361393235 66623534636162366364623234353331393230336461663865666565343337363362353834376662
39633537323366313136306264663830626438616434663430353936303661323665376237353335 38643762656639306335303666613632663663393538383435316535316366343464303062613630
36336135376632386231313030356465353665613930303437313564636130636336316431633663 37633166343834373230313439663538623466326334623138316630353266663930623537353561
36646430323236336634323730366533656364333935373161353939613761623331633138653062 39663861666439396462343761643966353764343439313265343235383331336163353037636262
66323536323139373837313433393065316163353030383536326531323137393833633465333432 30653830613431633535663039636633616162376239346336316531633032303635616134303032
38366563303463616365353064383161323334356530306431613862613631376461643438613733 35643265306265313631373230626136663636393462656437323231336233303134386332353731
36333164643165623864616631653432633961383035303331313339373337326661306238343063 32303662633836333161373666393761613263613065626139653137326262353131626639653230
63363665646139393363643038353230626465343336393865303062373261306531336164643638 64643431363363313462343565393735336437666435646135336438386262336231643265313666
66346163336236383131333237366630383964633334323461303330356465353937343535343032 32303666363666336133613565363134636435306635356237623134666464623539346231376466
37613961303861646266333162303731383962333562393035663239623539306230316134613239 34396366343634336638373766373730656165633033383432646536383334363663656564353464
61346234323038656237646661353663363262383965653637356663653966633664383430373363 61313464666233313432613865326337373333613234393833383837356338333864656462663336
33313332666138353939656266353134396633616364636333376232613230336361326265366265 32316665356662303361326535633932333766363765366137343262663931656562653766373638
66656334613435663432646165383262616636633232643230353434653237646133636361656639 65323866303634636561663831656233313434306137323636633130376238386138396539343437
36623564373835393862343330336361336432333834363234376534376132353165626134323135 64636630346263656137396466363932343334633361643339636635393562363539383466633633
31383030626362343034303838656631393565666330646465323434326434383466646164653935 31316535316230333538623236663861336239363566353730643039323261633861323137353539
30653235633262313537333733396464633238313830326633376436323364636337393263666630 63373530373432363939386135636163643639363362323736643639306436616163383632633337
65323830396138663761383832386264336534633961653837656432336366346439306134316235 30303362313437396632643332646330393035623832383864636535393233333433393331323038
65343163636364653262396364356233653533333363396339633564643831383733663863393632 35666134393435353334653637313131373963313837333934653234323964353765366136303532
33326262653438366435646337373638393238343039626533363239366366373663616366643365 34323465653838653433666634383435393838363734376665363230363062616464643064376439
39303837623835643831633066303861633930396566663261616132353933306237353561313563 64323463313066396133636437383537393362333864376536666137643236366335346435663433
39623732323566303937636133336665386231383637396565343430393232636230393638303138 30613164643739623531323965663539346466346230636334643661343533613766656134613463
35326565373936616666613635316239346535656463356531393830303230303033663031303339 39373966323636613263386661643431313230313162636261346233396365323735366530303266
65623433663230343639643033363666393264613964386134383230363030373232373637303836 31623561396332333764663832343533363161336439623830343736653831646137623031346636
30623461633062303039663331343134323264326264386462336566666330386130313039313635 61623832353062373763626138653861353166626533396239663463333863633737666236326161
33336435623938656435633432323536323064323262623832313764366466396465306338303038 66376233656138373766313163316133356637633536333735396433303732306562366466663564
35343131393132333664313563393662663761643265333937373136326563396535356461316562 61633163656239646665303162363538366362306231613161323364663036316364306236383331
63323335343266653565303037386463396131613133663835396531353064396265353031396664 62363935623334376131623732313735333531643262653465653734333432353763383763373338
38393131613430623330323038313062626334666161656665633934336163666533376134373831 63373537383761623661366565613337623839363161376235366338373430306265643133396536
66323563323765643532653864306335323463376363346662353033666138386638643564616333 64373935613163303033626439313333313164343066386362626437313166666232306264363735
38643932616530623164363663333437346333346465363634633532313931623138613134343338 66616139313736616262303237343335613466333636336135663162303232366435363839363663
62333333393166323039373163623033613736303066616364376432393830343262613661633831 30646566653934663732616462356662623361386431376663346437333764643861613630393437
66653661353738646439356661376161623061313334656165303736313262616563323361333535 61623964666338353635306631366666393730396338366338646337306533623965653566363337
33636261313436663961343162326664366461633263633736363634323163366135666362383166 32333437303131393237616138643834313163306333663163663437386532373131653132656235
37633435373335343434653865613336333765663334643230663330646536633835393336333563 63356536646366633036396137306364346464376332333362616233386263666266336364636531
64373434386464656137343835633165353637373830313030626235396162653035326361623431 65653238666234363366316262333330383737646462623835626533353339646536376339383433
63346165643938643638313439383734666236343266333836303130353634626234656430633138 38633664353134643366663666306635636434386161376138343761653335643934663464383034
313532626665646362623037353863656235 38333134333738643337343131323934366262636363303130313965343734336230626530346562
33396436636431656630373731613865613435333637326662626137633066653732333239366663
31626462393131663938636434646137353763646131393233636265666263336132366262303464
31616664613361336132356333643839353738656566663833306262663566396361646334323036
30373165316232316565666636396438383963313334366337303430363262396661613436396366
35336236313862623033646134306433613230653837303834353336333434386337376234386639
33343862313831643431383636643835613235373031326631616638666333623334636364613364
32633764336635353637623135303162643832393634646331643632636433646636303733623938
35343839316537323161326163376232353539316538643938333336643034653864653366363966
33373434366238363638346339376562333335636133323733616365303933313332626236376666
32636333326534303066616132353535303132643930303563353661333836386566353234373033
39366231313031613963663230633835666565623236393361323434313836323636333834336166
31386165363165363336613463626564653863633163386433623537336566363764643961613930
36346466363561333661306532373036303134303632393661303439396663376435653039356131
65353738383633313963643366353866623538623036373337663038333063626562613066383665
63336166626432363864313630323736663434303832373864643661323235666535323663306236
30373861663731616463633039353139383139346135306239333735356333646532313231656136
35313436363532353439373237356434393039383933356135653037613134356462396161363831
39383462356463633661663962633064666539663566663634656237386439373336363362343230
39363032323836663337353332646136303239393530353661326437383630626563303434626166
39633066633730323364313763663439366232346331653633646534663763336365396639633138
65326135303735356133

View File

@ -40,6 +40,22 @@ vault_openapply_firebase_token: !vault |
[encrypted token here] [encrypted token here]
``` ```
### SPA Firebase Configuration (Required for non-blank /app UI)
```yaml
# Public Firebase client config used at SPA build-time
vault_openapply_firebase_api_key: "AIza..."
vault_openapply_firebase_auth_domain: "your-project.firebaseapp.com"
vault_openapply_firebase_project_id: "your-project-id"
vault_openapply_firebase_storage_bucket: "your-project.appspot.com"
vault_openapply_firebase_messaging_sender_id: "1234567890"
vault_openapply_firebase_app_id: "1:1234567890:web:abcdef123456"
# Optional UX/admin metadata
vault_openapply_admin_email: "admin@your-domain.tld"
vault_openapply_support_email: "support@your-domain.tld"
```
## Creating/Editing Vault Variables ## Creating/Editing Vault Variables
### First-time Setup ### First-time Setup

View File

@ -32,6 +32,19 @@ openapply_app_env:
NODE_ENV: production NODE_ENV: production
PORT: "{{ openapply_app_service_port }}" PORT: "{{ openapply_app_service_port }}"
openapply_app_spa_env:
VITE_BASE_URL: /app
VITE_FIREBASE_API_KEY: "{{ vault_openapply_firebase_api_key | default('your-firebase-api-key') }}"
VITE_FIREBASE_AUTH_DOMAIN: "{{ vault_openapply_firebase_auth_domain | default('your-project.firebaseapp.com') }}"
VITE_FIREBASE_PROJECT_ID: "{{ vault_openapply_firebase_project_id | default('your-project-id') }}"
VITE_FIREBASE_STORAGE_BUCKET: "{{ vault_openapply_firebase_storage_bucket | default('your-project.appspot.com') }}"
VITE_FIREBASE_MESSAGING_SENDER_ID: "{{ vault_openapply_firebase_messaging_sender_id | default('your-sender-id') }}"
VITE_FIREBASE_APP_ID: "{{ vault_openapply_firebase_app_id | default('your-app-id') }}"
VITE_ADMIN_EMAIL: "{{ vault_openapply_admin_email | default('admin@example.com') }}"
VITE_SUPPORT_EMAIL: "{{ vault_openapply_support_email | default('support@example.com') }}"
openapply_app_require_real_firebase_config: true
openapply_app_firebase_token: "{{ vault_openapply_firebase_token | default('') }}" openapply_app_firebase_token: "{{ vault_openapply_firebase_token | default('') }}"
openapply_app_verify_status_codes: openapply_app_verify_status_codes:
- 200 - 200

View File

@ -63,6 +63,14 @@
group: "{{ openapply_app_service_group }}" group: "{{ openapply_app_service_group }}"
mode: "0640" mode: "0640"
- name: Render OpenApply SPA build environment file
ansible.builtin.template:
src: openapply.spa.env.j2
dest: "{{ openapply_app_root }}/spa/.env"
owner: "{{ openapply_app_service_user }}"
group: "{{ openapply_app_service_group }}"
mode: "0640"
- name: Check node_modules presence - name: Check node_modules presence
ansible.builtin.stat: ansible.builtin.stat:
path: "{{ openapply_app_root }}/node_modules" path: "{{ openapply_app_root }}/node_modules"

View File

@ -15,3 +15,17 @@
- openapply_app_service_user | length > 0 - openapply_app_service_user | length > 0
- openapply_app_start_command | length > 0 - openapply_app_start_command | length > 0
fail_msg: "Required OpenApply role variables are missing." fail_msg: "Required OpenApply role variables are missing."
- name: Ensure real Firebase SPA configuration is provided
ansible.builtin.assert:
that:
- openapply_app_spa_env.VITE_FIREBASE_API_KEY != 'your-firebase-api-key'
- openapply_app_spa_env.VITE_FIREBASE_AUTH_DOMAIN != 'your-project.firebaseapp.com'
- openapply_app_spa_env.VITE_FIREBASE_PROJECT_ID != 'your-project-id'
- openapply_app_spa_env.VITE_FIREBASE_STORAGE_BUCKET != 'your-project.appspot.com'
- openapply_app_spa_env.VITE_FIREBASE_MESSAGING_SENDER_ID != 'your-sender-id'
- openapply_app_spa_env.VITE_FIREBASE_APP_ID != 'your-app-id'
fail_msg: >-
OpenApply SPA is using placeholder Firebase values. Set vault_openapply_firebase_* variables
in group_vars/all/vault.yml, then redeploy.
when: openapply_app_require_real_firebase_config | bool

View File

@ -0,0 +1,3 @@
{% for key, value in openapply_app_spa_env.items() %}
{{ key }}={{ value }}
{% endfor %}