Skip to content

Commit a7c4323

Browse files
committed
Switch to using basic auth for configuration
1 parent 02bea62 commit a7c4323

File tree

5 files changed

+45
-21
lines changed

5 files changed

+45
-21
lines changed
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
REACT_APP_SEARCH_APP_NAME=changeme
2-
REACT_APP_SEARCH_APP_API_KEY=changeme
3-
REACT_APP_SEARCH_APP_ENDPOINT=http://localhost:9200
2+
REACT_APP_SEARCH_APP_ENDPOINT=http://localhost:9200
3+
REACT_APP_SEARCH_USER=elastic
4+
REACT_APP_SEARCH_PASSWORD=changeme

example-apps/internal-knowledge-search/app-ui/src/components/SearchApplicationSettings.tsx

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ import {json} from "react-router-dom";
1111

1212
const SearchApplicationSettings: React.FC = () => {
1313
const dispatch = useDispatch();
14-
const {appName, apiKey, searchEndpoint, searchPersona} = useSelector((state: RootState) => state.searchApplicationSettings);
14+
const {appName, appUser, appPassword, searchEndpoint, searchPersona} = useSelector((state: RootState) => state.searchApplicationSettings);
1515
const {showToast} = useToast();
1616

1717
const fetchPersonaOptions = async () => {
1818
try {
1919
const identitiesIndex = ".search-acl-filter-search-sharepoint" //TODO fix hardcoded
2020
const identitiesPath = searchEndpoint + "/" + identitiesIndex + "/_search"
21-
const response = await fetch(identitiesPath, {headers: {"Authorization": "ApiKey " + apiKey}});
21+
const response = await fetch(identitiesPath, {headers: {"Authorization": "Basic " + btoa(appUser + ":" + appPassword)}});
2222
const jsonData = await response.json();
2323
const ids = jsonData.hits.hits.map((hit) => hit._id)
2424
return ids
@@ -49,15 +49,19 @@ const SearchApplicationSettings: React.FC = () => {
4949
};
5050

5151
const handleSave = () => {
52-
dispatch(updateSettings({appName, apiKey, searchEndpoint, searchPersona}));
52+
dispatch(updateSettings({appName, appUser, appPassword, searchEndpoint, searchPersona}));
5353
showToast("Settings saved!", MessageType.Info);
5454
};
5555

56-
const updateAppName = (e) => dispatch(updateSettings({appName: e.target.value, apiKey, searchEndpoint, searchPersona}))
57-
const updateApiKey = (e) => dispatch(updateSettings({appName, apiKey: e.target.value, searchEndpoint, searchPersona}))
58-
const updateSearchEndpoint = (e) => dispatch(updateSettings({appName, apiKey, searchEndpoint: e.target.value, searchPersona}))
56+
const updateAppName = (e) => dispatch(updateSettings({appName: e.target.value, appUser, appPassword, searchEndpoint, searchPersona}))
5957

60-
const updateSearchPersona = (e) => dispatch(updateSettings({appName, apiKey, searchEndpoint, searchPersona: e}))
58+
const updateAppUser = (e) => dispatch(updateSettings({appName, appUser: e.target.value, appPassword, searchEndpoint, searchPersona}))
59+
60+
const updateAppPassword = (e) => dispatch(updateSettings({appName, appUser, appPassword: e.target.value, searchEndpoint, searchPersona}))
61+
62+
const updateSearchEndpoint = (e) => dispatch(updateSettings({appName, appUser, appPassword, searchEndpoint: e.target.value, searchPersona}))
63+
64+
const updateSearchPersona = (e) => dispatch(updateSettings({appName, appUser, appPassword, searchEndpoint, searchPersona: e}))
6165

6266
return (
6367
<div className="container mx-auto p-4 bg-white rounded shadow-md">
@@ -91,17 +95,34 @@ const SearchApplicationSettings: React.FC = () => {
9195

9296
<div className="text-left mb-6 p-4 border rounded bg-gray-50">
9397
<label
94-
htmlFor="apiKey"
98+
htmlFor="appUser"
99+
className="block text-sm font-medium mb-1 text-gray-700"
100+
>
101+
Application Elasticsearch Username:
102+
</label>
103+
<p className="text-xs mb-2 text-gray-500">The Elasticsearch username to use to establish a connection with.</p>
104+
<input
105+
id="appUser"
106+
type="text"
107+
value={appUser}
108+
onChange={updateAppUser}
109+
className="p-2 w-full border rounded focus:outline-none focus:shadow-outline"
110+
/>
111+
</div>
112+
113+
<div className="text-left mb-6 p-4 border rounded bg-gray-50">
114+
<label
115+
htmlFor="appPassword"
95116
className="block text-sm font-medium mb-1 text-gray-700"
96117
>
97-
Application API Key:
118+
Application Elasticsearch Password:
98119
</label>
99-
<p className="text-xs mb-2 text-gray-500">Your application's unique API key used for looking up identities.</p>
120+
<p className="text-xs mb-2 text-gray-500">The Elasticsearch password to use to establish a connection with.</p>
100121
<input
101-
id="apiKey"
122+
id="appPassword"
102123
type="password"
103-
value={apiKey}
104-
onChange={updateApiKey}
124+
value={appPassword}
125+
onChange={updateAppPassword}
105126
className="p-2 w-full border rounded focus:outline-none focus:shadow-outline"
106127
/>
107128
</div>

example-apps/internal-knowledge-search/app-ui/src/models/SearchApplicationSettingsModel.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import {FilterModel} from "./FilterModel";
22

33
export interface SearchApplicationSettingsModel {
44
appName: string;
5-
apiKey: string;
5+
appUser: string;
6+
appPassword: string;
67
searchEndpoint: string;
78

89
searchPersona: string;

example-apps/internal-knowledge-search/app-ui/src/pages/SearchPage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,24 @@ export default function SearchPage() {
3737
//TODO: simplify query state and move it to one place
3838
const [query, setQuery] = useState<string>("");
3939

40-
const {appName, apiKey: adminApiKey, searchEndpoint, searchPersona} = useSelector((state: RootState) => state.searchApplicationSettings);
40+
const {appName, appUser, appPassword, searchEndpoint, searchPersona} = useSelector((state: RootState) => state.searchApplicationSettings);
4141
const {sorts} = useSelector((state: RootState) => state.sort);
4242
const indexFilter = useSelector((state: RootState) => state.filter)["filters"]["Data sources"].values;
4343

4444

4545
useEffect(() => {
4646
const fetchData = async () => await handleSearchSubmit();
4747
fetchData();
48-
}, [indexFilter, sorts, appName, adminApiKey, searchEndpoint]);
48+
}, [indexFilter, sorts, appName, appUser, appPassword, searchEndpoint]);
4949

5050
const getOrCreateApiKey = async () => {
5151
if (searchPersona == "admin"){
52-
return adminApiKey
52+
return "admin key" //TODO fix hardcoded
5353
}
5454
else {
5555
const identitiesIndex = ".search-acl-filter-search-sharepoint" //TODO fix hardcoded
5656
const identityPath = searchEndpoint + "/" + identitiesIndex + "/_doc/" + searchPersona
57-
const response = await fetch(identityPath, {headers: {"Authorization": "ApiKey " + adminApiKey}});
57+
const response = await fetch(identityPath, {headers: {"Authorization": "Basic " + btoa(appUser + ":" + appPassword)}});
5858
const jsonData = await response.json();
5959
console.log(jsonData)
6060
const permissions = jsonData._source.query.template.params.access_control

example-apps/internal-knowledge-search/app-ui/src/store/slices/searchApplicationSettingsSlice.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {SearchApplicationSettingsModel} from "../../models/SearchApplicationSett
55

66
const initialState: SearchApplicationSettingsModel = {
77
appName: process.env.REACT_APP_SEARCH_APP_NAME || "some-search-application",
8-
apiKey: process.env.REACT_APP_SEARCH_APP_API_KEY || "xxxxxxxxxxxxxxxxxxx",
8+
appUser: process.env.REACT_APP_SEARCH_USER || "elastic",
9+
appPassword: process.env.REACT_APP_SEARCH_PASSWORD || "changeme",
910
searchEndpoint: process.env.REACT_APP_SEARCH_APP_ENDPOINT || "https://some-search-end-point.co",
1011
searchPersona: "admin"
1112
};

0 commit comments

Comments
 (0)