1) and 2) are easy.

So let's start with the corridors.
You can check for each room which room is next and then you can do simple connections with doors at each passage end.
Fleshing out a maze is not really easy. What you can do is you scan what's around the sides of the room connector passages and dig in the sides until this is not possible anymore (no 'a's anymore). When starting to dig you might place a door right away.

During all this you have to track all possible routes (from room a to room b via corridor c passing door d which is between room b and passage c and so you can evaluate in which room you might place a key (in this case it would either be passage c or room a).
For ammo I would count how many enemies are placed in a room or passage and then drop ammo fitting to this enemy number.

Which weapons can be placed I would restrict via options in the generator tool. The weapons itself I would again place like the keys. You need an internal list in which order rooms and passages can be accessed. You some simple map scanning and a node structure for this, like it is also done with pathfinding.