How do I structure my Perl CGI program? - perl

We just got our first major Perl CGI assignment in my CS class. Our task is to create an mp3 sharing site that allows users to create accounts, log in, share mp3's. Statistics must be shown of current users, mp3's available, etc. All actions must be written to a log file. Our code must be secure.
So far, I have implemented each of these actions separately as their own CGI scripts. For instance, I have a script that draws the login form, the registration form, a script that allows for mp3 uploads, and another that does the mp3 serving. I've also created a module that posts relevant information to a log file whenever I call an instance of it. However, each script is individual, with the exception of the Login screen, which draws a form and then posts to a login.cgi. The account generation works the same. But, for the most part, each acts on its own.
My question:
How do I link this together so that no action is allowed unless the user is logged in? I assume that I should use the login script (the one that receives the post action) to drive everything, but how do I do it? I'm really at a loss here. I would like to have a user log in, a homepage is drawn with options (add mp3, listen mp3, show staistics, etc.) Is it best that I draw some sort of form and with actions set to the different scripts? How do I handle the return from these scripts? Would cookies help in some way?
Other relevant information:
I've done most of my work so far in CGI.pm using the ovid tutorial found on this site and Lincoln Stein's book.

See CGI::Application and CGI::Session with CGI::Application::Plugin::Session.

What you want to implement is gererally called "session management".
look here (how-can-i-add-session-management-to-a-simple-perl-cgi-web-page) for a previous SO question
You might want to also look at these pages to get some background.
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-1044683.html
http://www.dev411.com/wiki/Session_Management_with_Perl

Related

How can I interact with a website through Racket

I am currently getting data off of some websites for my programs in Racket but how can I use Racket to interact with a website in order to log in and download a file or perform some kind of action
You need to look at the net library. Exactly how to log into the a particular web-site depends on how it is written. You need to look at the html to find out what the fields are called.
Look at the bottom of this page to see an example of how to login to a web-page.
http://docs.racket-lang.org/net/http-client.html?q=url

SurveyMonkey survey as in-page overlay/modal/lightbox

I've searched the SurveyMonkey website, both help... and developer..., as well as the general net and stackoverflow, and can't find any examples of a SurveyMonkey survey being displayed in an in-page overlay (referred to by some as a "lightbox" or modal).
I think what I need to use is SurveyMonkey's Embed option, as opposed to Invitation or Survey Popups:
http://help.surveymonkey.com/articles/en_US/kb/How-do-I-embed-a-survey-or-have-it-open-in-a-popup-window-on-my-site
I'd like that overlay div to appear, close, etc upon the same triggers as a regular survey would/could, that is open if the user has no previous SurveyMonkey cookie, close when completed or closed by user, etc.
I can probably hack through a solution by forcing the survey into a custom overlay I build, but the behaviors would be more tricky, probably having to read the SurveyMonkey cookie, I suppose. Or, perhaps I could check for certain IDs of SurveyMonkey content that exists at various stages to pull off the behaviors (but I'll have to look at the generated code throughout the process to know if this is an option).
In short, it seems like someone else has surely run into this issue before and likely that a solution has already been created, at least partial to save me some time. I just can't find it.
Here are some things I found on the embed itself:
https://www.surveymonkey.com/blog/en/blog/2013/04/23/how-to-embed-your-survey-on-a-website/
https://www.surveymonkey.com/blog/en/blog/2013/04/16/video-tutorial-how-to-embed-your-survey-on-a-website/
Any and all help much appreciated, pointers/resources, example code, etc. Thanks!

Make user submitted data into a link

I'm a bit of a newbie and I'm scratching my head over this one.
Here is what I want to do:
On my web page, I have an input form and a submit button.
I want users to input data to the form, click submit, and go to a page that uses the data the user input as the url.
For example, if a user inputs 'bob' and clicks submit, they would go to '../bob.html'.
Is this possible?
Thanks!
I think the task you have taken on cannot be solved with HTML, though I am not sure about HTML5. This sort of thing is generally done using Java/JSP, C#/ASP, Perl CGI, or any of a number of other options. Whatever you use will almost certainly involve a bit of programming effort and require a server running at your site.
I could be wrong, so try looking at http://www.w3schools.com/tags for a relatively complete list of HTML options. It also occurs to me that you might be able to do this client side using JavaScript. Once again you might try W3schools for some helpful tutorials or just a quick query in you favorite search engine will bring up lots of stuff to get you started. One problem with JavaScript is that many people turn it off in their browsers for security reasons.
Good luck.

OwnCloud enhance core features with App (eg. user registration)

I started looking into OwnCloud app development to add some capabilities I would like to my server. To me it seems like Apps can't modify anything like the Login page or User Management page. Is this the case?
I want to build a user registration app and would love to integrate it into the user management page (if not and it has to exist as its own app page not a big deal). The one big problem I see so far is not being able to add a "Register" link to the login page. I could just go in and add it to the source manually, but I would like to keep the App self contained so others can use it too.
If this is not possible to do in an App I may just need to modify the core application and then see if they will accept my feature addition in a pull request.
Thanks to anyone who can shed some light on this for me. I don't want to waste my time trying to figure out how to do it with an App on the platform if it wont be doable.
After a lot of digging around I did figure out a way to do this.
In the App's app.php file, you can force a script to be loaded if the plugin is enabled:
$api->addScript('script_name'); // without .js
In that script jQuery can be used to add the elements to the page where you need them.
This was a good solution for me since I only needed to add a single button to the login page. I can see this being a bad idea if you want to make vast modifications. At that point you might as well just create a separate page that you have full control over.

How can I program a button on an Access form to link to a browser window that looks up multiple addresses on Google Maps?

My problem is very similar to the one posted here:
http://www.utteraccess.com/forum/Plotting-Addresses-Maps-t1968130.html
except that thread never found any solutions. Basically, I'm working on an Access form that has a datasheet as a subform. Upon clicking a button on the main form I'm trying to make it so that a browser window opens up and, using the address columns from the spreadsheet data in the subform, plot all the address markers listed. I've looked up a lot of ways to attempt this but I've yet to find a way that seems to work.
I'm not even sure if it's possible to plot multiple markers on Google Maps, but according to research (and after trying it myself) it seems like it isn't, although I don't want to rule it out entirely because I'm still not 100% sure. However I know both Google Earth and batchgeo.com do allow this. I still want to try and do this on Google Maps, but if that doesn't work I want to try to do it using batchgeo.com and if that still doesn't work, then Google Earth (I don't want to make the user download external software if possible).
If it helps, from what I've read API's seem like a useful tool, though I'm not sure how to apply it to an Access form, it seems more like a way to embed to already existing websites.
I'd really appreciate if someone could help me figure out how to approach this problem!
Maybe this would help?
http://ramblings.mcpher.com/Home/excelquirks/getmaps/mapmarkers
It is Excel but should be translatable.
Here is another example, this time using Access:
http://www.utteraccess.com/forum/Google-Maps-Multiple-Mar-t1973499.html
...from what I've read API's seem like a useful tool, though I'm not
sure how to apply it to an Access form, it seems more like a way to
embed to already existing websites.
You're right. There's no way, that I'm aware of, to embed a Google Maps object in a form (like an ActiveX control). Microsoft MapPoint is a software product that lets you do Map integration by way of an ActiveX control (no need to use HTML and/or javascript).
What I usually do on a project like you're working on is I get my HTML page working the way I want it to, outside and independent of MS Access. You should be able to program and test the HTML file locally without having to use an actual web server. Just use something like NotePad++ or Sublime Text Editor 2 to write your HTML and Javascript and then open the file in your browser to see if it works. I'm quite sure you'll need to use Javascript in your HTML page to make this work. That's what the Google Maps API is all about.
After you have your webpage working, then you will have to go into Access and write code to create that web page on the fly with the address data for the current data set. You can just write it out to the Windows Temp folder and then open your browser control that that web page.
Julian Knight's answer links to more specifics on how to create the HTML page on the fly. It looks like gobble-de-gook, mostly because it is. Outputting HTML/Javascript/CSS from VBA is far less than optimal. This is why you troubleshoot it outside of Access, as much as you can.